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;