MariaDB utf8字符集查询匹配异常:预期1条结果却返回4条
解决MariaDB查询匹配过度的问题
嘿Jiri,我碰到过好几个类似的问题,大概率是字符集排序规则在搞鬼,给你一步步拆解思路:
先确认问题根源
你用的utf8字符集默认的排序规则(比如utf8_general_ci)是忽略重音和大小写的,这就导致数据库会把Jiří和Jiri、Červený和Cerveny当成相等的内容。你可以先跑这条命令看看字段的具体排序规则:SHOW CREATE TABLE table1;看输出里
field1的COLLATE属性,应该能看到是类似utf8_general_ci这种不区分重音的规则。临时解决:查询时指定严格匹配规则
如果不想改动表结构,你可以在查询语句里临时指定区分重音的排序规则,比如用二进制比较的utf8_bin:SELECT * FROM table1 WHERE field1 COLLATE utf8_bin = 'Jiri Cerveny';这样就能精确匹配到只有
Jiri Cerveny的那条记录。永久解决:修改字段的排序规则
要是希望这个字段以后都严格区分重音,直接修改字段的排序规则就行,记得根据你实际的字段类型(比如VARCHAR的长度)调整命令:ALTER TABLE table1 MODIFY COLUMN field1 VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;或者如果你需要支持更全的Unicode字符,也可以考虑把字符集换成
utf8mb4,搭配utf8mb4_0900_as_cs这种区分大小写和重音的排序规则,兼容性更好。额外提醒
如果你用的是较新版本的MariaDB,注意utf8其实是utf8mb3的别名,只支持BMP字符,建议优先用utf8mb4来覆盖所有Unicode字符,避免后续出现其他字符兼容问题。
内容的提问来源于stack exchange,提问作者minimalne4
相关产品推荐
相关产品推荐

