搜索
您的当前位置:首页正文

MySQL查询时报错(utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)

来源:星星旅游

在MySQL中做嵌套查询的时候经常遇到错误1267,这就是因为查询出的数据和做筛选的列的字符集编码不同造成的!

select 
	t.rebate_bill_code '账单编号',
	tt.perf_amount '业绩金额',
	tt.goal_amount '目标金额',
	tt.completion_rate*100 '达成率(%)'
from 
	rebate_bill  t
left join rebate_bill_rebate_info tt on tt.rebate_bill_code = t.rebate_bill_code
where t.bill_month = 14

错误代码: 1267
Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

utf8mb4_unicode_ci和utf8mb4_general_ci列不能混合查询!!!!
这个时候我们就要把字符集改为相同的才能进行查询!(不过我不建议去改表的结构,一般表结构是不去做更改的)

查看表字符集结构:

语法:show table status from 库名 like  表名
SHOW TABLE STATUS FROM allin LIKE 't_member';
查看表中所有列的字符集
语法:show full columns from 表名;
SHOW FULL COLUMNS FROM allin.t_member;

解决方法:
我们可以在查询的时候指定等号一边的字符集编码

格式:WHERE 列名 COLLATE utf8mb4_unicode_ci = 嵌套语句
或者:WHERE 列名 = 嵌套语句 COLLATE utf8mb4_unicode_ci 达到让两边的字符集相等!
select 
	t.rebate_bill_code '账单编号',
	tt.perf_amount '业绩金额',
	tt.goal_amount '目标金额',
	tt.completion_rate*100 '达成率(%)'
from 
	rebate_bill  t
left join rebate_bill_rebate_info tt on tt.rebate_bill_code COLLATE utf8mb4_unicode_ci = t.rebate_bill_code
where t.bill_month = 14

所以一般在创建表的时候就需要考虑设置好表的字符集

CREATE TABLE student (
Id INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(20) NOT NULL COMMENT  '姓名',
Sex VARCHAR(4) COMMENT  '性别',
Birth YEAR COMMENT  '出生年份',
Department VARCHAR(20) NOT NULL COMMENT  '院系',
Address VARCHAR(50) COMMENT '家庭住址'
)ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_unicode_ci; # 指定字符集
#或者 ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC

因篇幅问题不能全部显示,请点此查看更多更全内容

Top