MySQL中的大小写敏感排序

73

MySQL 中是否有支持区分大小写的排序类型? 我在 MySQL 中拥有所有类型的排序,它们的名称都以 _ci 结尾,因此它们是不区分大小写的排序。

3个回答

94
根据MySQL手册http://dev.mysql.com/doc/refman/5.0/en/charset-mysql.html,您应该能够将排序规则设置为_cs以实现区分大小写。您可以通过执行SHOW COLLATION WHERE COLLATION LIKE "%_cs"查询获取_cs排序规则列表。

经过一番研究:

显然在MySQL中没有utf8_*_cs(尚未支持)。如果需要对utf8字段进行大小写敏感的排序,应该使用utf8_bin。这会破坏ORDER BY,但可以通过ORDER BY column COLLATE utf8_general_ci来修复。

来源: http://forums.mysql.com/read.php?103,19380,200971#msg-200971http://forums.mysql.com/read.php?103,156527,198794#msg-198794


2
这是MySQL 8.0.1及更高版本的新功能。 - Jagger
1
utf8mb4_bin 也存在,因为现在是2019年 :-) - artfulrobot
将UTF8值转换为Latin1字符集,然后使用latin1_general_cs进行like比较,请使用以下方法:select ... convert(cast(convert(myfield using utf8) as binary) using latin1) COLLATE latin1_general_cs like '...' - jfx

16

尝试使用以_bin结尾的排序规则,例如latin1_binutf8_bin,具体取决于您的字符集。


谢谢Neil。当我将用户列设置为utf8_bin时,它可以检索到仅在查询中指定的数据,尽管我有相同单词的数据,例如Keyur、keyur、KEYUR。无论如何,感谢您。 - Keyur Padalia

4

MySQL的新版本(8.0.1及以上)终于带有一组utf8mb4_*_0900_as_cs排序规则,与此相关的更多信息请参见这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接