MySQL 1267 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT)

参考资料
https://www.2cto.com/database/201612/577684.html
https://blog.csdn.net/li_xiao_ming/article/details/52152414

CREATE TABLE a (
id VARCHAR(32)
) DEFAULT CHARSET = utf8 COLLATE utf8_general_ci;
INSERT INTO a VALUES('a');

CREATE TABLE b (
id VARCHAR(32)
) DEFAULT CHARSET = utf8 COLLATE utf8_general_ci;
INSERT INTO b VALUES('b');

CREATE TABLE c (
id VARCHAR(32)
) DEFAULT CHARSET = utf8 COLLATE utf8_unicode_ci;
INSERT INTO c VALUES('c');

SELECT DISTINCT a.id,b.id FROM a,b WHERE a.id=b.id ORDER BY a.id DESC,b.id DESC; -- ok

SELECT DISTINCT a.id,b.id,c.id FROM a,b,c WHERE a.id=b.id AND b.id=c.id ORDER BY a.id DESC,b.id DESC,c.id DESC; -- error

实验结果
第一次查询ok
第二次查询error,Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’

SELECT CONCAT('ALTER TABLE ','c',' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') FROM information_schema.TABLES WHERE TABLE_SCHEMA='test001';
ALTER TABLE c CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
SELECT DISTINCT a.id,b.id,c.id FROM a,b,c WHERE a.id=b.id AND b.id=c.id ORDER BY a.id DESC,b.id DESC,c.id DESC; -- ok

实验结果
查询error的语句这一次ok了

实验结论
不能用’=’比较两个不同排序规则的字段

猜你喜欢

转载自blog.csdn.net/just_fight_/article/details/80388059