MySQL語句錯誤:Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)


兩張表的字段分別是兩種不同的比較規則,在進行聯表查詢的時候就會出現上述錯誤。
字符比較規則有各個層級的,比如數據庫、表、字段,這里只需要保證字段的比較規則一致即可。但是為了整體一致,除了特殊的業務需求,我們最好還是保證庫、表、字段的比較規則一致。

-- ----------------------------
-- Table structure for administrative_area
-- ----------------------------
DROP TABLE IF EXISTS `administrative_area`;
CREATE TABLE `administrative_area` (
`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`create_time` datetime(6) DEFAULT NULL,
`create_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`last_update_time` datetime(6) DEFAULT NULL,
`last_update_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`level` int(0) NOT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`parent_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

這里給出一張表結構,然后在這個表結構的基礎上,把表和字段都調整為utf8mb4_bin,給出修正的例子:

------表修改------

show table status from dubbo_play like '%administrative_area%';

此時表的collations如下圖所示:

此時修改表的collate
ALTER TABLE `administrative_area` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;
此時的結果:

------字段修改------
修改完表的比較規則之后,我們看看字段的狀態:

所以如果此時執行聯表查詢,還是會報錯,我們需要把字段修改為相同的比較規則:

ALTER TABLE `administrative_area` MODIFY `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `administrative_area` MODIFY `create_time` datetime(6) DEFAULT NULL;
ALTER TABLE `administrative_area` MODIFY `create_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `administrative_area` MODIFY `last_update_time` datetime(6) DEFAULT NULL;
ALTER TABLE `administrative_area` MODIFY `last_update_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;
ALTER TABLE `administrative_area` MODIFY `code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `administrative_area` MODIFY `level` int(0) NOT NULL;
ALTER TABLE `administrative_area` MODIFY `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
ALTER TABLE `administrative_area` MODIFY `parent_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;

此時的字段狀態:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM