不得不吐槽一下,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/
网友评论