unicode字符编码表下载_[MySQL报错]1267(utf8mb4_unicode) (utf8mb4_general)

d98fce9f02da5198a2abdc0db25ca6b6.png

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

SELECT  * FROM t_access  
WHERE passport_id = (
SELECT passport_id FROM allin.t_member WHERE id="2e5a38a1-341a-48a6-bd60-01fd7ebf0690" ); 

错误代码: 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 表名

eg:SHOW TABLE STATUS FROM allin LIKE 't_member'; 

查看表中所有列的字符集

语法:show full columns from 表名;

eg:SHOW FULL COLUMNS FROM allin.t_member; 


解决方法:
我们可以在查询的时候指定等号一边的字符集编码
格式:WHERE 列名 COLLATE utf8mb4_unicode_ci = 嵌套语句
或者:WHERE 列名 = 嵌套语句 COLLATE utf8mb4_unicode_ci 达到让两边的字符集相等!

SELECT  * FROM t_access  
WHERE passport_id  COLLATE utf8mb4_unicode_ci = (
SELECT passport_id  FROM allin.t_member WHERE id="2e5a38a1-341a-48a6-bd60-01fd7ebf0690" ); 


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

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 
06_MySQL查询时报错(utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT)​www.jianshu.com
72f6fe0f11abe4a4d6c226c471dac25f.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值