MySQL进行连表查询时得错误
今天在做一些多表查询时,MySQL报错:
[Err] 1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
问题分析:表之间的编码不一致,或者是比较的字段之间的编码不一致。
解决方法:
查看表之间的编码是否一致;
show create table <表名>;
如果表不一致,修改其中一个表的编码格式,使其表间编码一致
alter table <表名> character set utf8 COLLATE utf8_general_ci;
表间编码一致仍出现同样错误,查询(相关查询语句的,=号两边)字段之间是否一致
show full columns from <表名>;SELECT CHARSET(<字段名>) FROM <表名>;
修改字段编码
ALTER TABLE <表名> MODIFY <字段名> <字段类型> CHARACTER SET utf8 COLLATE utf8_general_ci;
可能是因为旧的表不知道怎么回事用的是utf8mb4_unicode_ci,所以我新建表也要用utf8mb4_unicode_ci,但是我直接建这个表然后指定utf8mb4_unicode_ci,直接报不支持,一脸懵逼,没办法只能够先用默认值建好后再修改。
CREATE TABLE `lianciword` (`level` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '修炼等级:1、2、3、4、5、6、7、8、9、10、11、12、13',`wordid` bigint(20) DEFAULT NULL COMMENT '单词ID',`wordname` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单词名称',`symbol` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '音标',`translate` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '翻译',`sentence` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '例句',KEY `index_lianciword` (`level`,`wordid`),KEY `index2_lianciword` (`wordname`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
下面是先用默认值建好后再修改,注意这里需要修改表和字段的,如果只是修改某一个可能不会成功。
#drop table sentence;CREATE TABLE sentence(id BIGINT primary key auto_increment,level VARCHAR(2) COMMENT '修炼等级:1、2、3、4、5、6、7、8、9、10、11、12、13',wordid BIGINT COMMENT '单词ID',example VARCHAR(1024) COMMENT '句子',translate VARCHAR(1024) COMMENT '翻译',musicid VARCHAR(50) COMMENT '读音ID');ALTER TABLE sentence ADD INDEX index_sentence (level,wordid);alter table sentence character set utf8mb4 COLLATE utf8mb4_unicode_ci;ALTER TABLE sentence MODIFY level VARCHAR(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
