mysql中文字符串查询条件_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:将字符串中的每一个字符用二进制数据存储,区分大小写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值