MySql中部分汉字或者emoji当作查询条件结果错误

不得不吐槽一下,MySql都到8.0版本了,现在存储emoji啥的特殊字符,还是一堆问题。
之前遇到了存储报错的问题,google半天可算解决了:https://www.jianshu.com/p/106b5611e36d

可出现了新问题,当存入的字符超过2个字节的时候,MySql比较的是前2个字节。

比如下面两个emoji就被认为是相等的两个字符:

unicode “\uD83C\uDF40”
unicode “\uD83D\uDC3B”

类似的还有一些汉字也会出现这问题:

或者在执行查询语句出现错误提示:

ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

解决方法:

/usr/local/etc/my.cnf(Mac系统)中的配置项改成:

collation-server = utf8mb4_bin

完整的配置:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_bin

然后重启MySql服务,之后创建的数据库和表就没问题了

修改已经创建好的数据库

ALTER TABLE 你的表名 MODIFY COLUMN 字段名 VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

utf8_general_ci 不区分大小写 ci:case insensitive
utf8_general_cs 区分大小写 cs:case insensitive
utf8_bin:将字符串中的每一个字符用二进制数据存储,区分大小写。

http://www.thetreecat.com/mysqlzhong-emojibiao-qing-zuo-wei-cha-xun-tiao-jian-cha-xun-shi-xiao/

你可能感兴趣的:(MySql中部分汉字或者emoji当作查询条件结果错误)