我了解字符集,但不理解排序规则。我知道在MySQL或任何关系数据库管理系统中,每个字符集都有一个默认排序规则,但我仍然不理解!有人能以通俗易懂的方式解释一下吗?
提前致谢;-)
我了解字符集,但不理解排序规则。我知道在MySQL或任何关系数据库管理系统中,每个字符集都有一个默认排序规则,但我仍然不理解!有人能以通俗易懂的方式解释一下吗?
提前致谢;-)
数据库排序规则的主要目的是确定数据如何进行排序和比较。
字符串比较的大小写敏感性
SELECT "New York" = "NEW YORK";`
对于不区分大小写的排序规则,将返回true;对于区分大小写的排序规则,将返回false。
可以通过排序规则名称中的_ci
和_cs
后缀来确定使用的排序规则。_bin
排序规则执行二进制比较(字符串必须完全相同)。
重音符号/变音符号的比较
排序规则还确定是否将带重音符号/变音符号的字符视为它们在字符串比较中的基础拉丁字母。
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
在前一种情况下将返回true;在后一种情况下返回false。你需要阅读每个排序规则的描述以确定哪个是哪个。
字符串排序
排序规则会影响字符串的排序方式。
例如,
在芬兰/瑞典字母表(latin1_swedish_ci
)中,Umlauts(ÄÖÜ)位于字母表的末尾。
在德语DIN-1排序(latin_german1_ci
)中,它们被视为A、O、U。
在德语DIN-2排序(latin_german2_ci
)中,它们被视为AE、OE、UE。(“电话簿”排序)
在latin1_spanish_ci
中,“ñ”(n-tilde)是介于“n”和“o”之间的一个单独的字母。
当使用非拉丁字符时,这些规则会导致不同的排序顺序。
在运行时使用排序规则
你必须为你的表和列选择一个排序规则,但如果你不介意性能问题,你可以在运行时使用COLLATE
关键字将数据库操作强制转换为特定的排序规则。
这将使用德语DIN-2排序规则按name
列对table
进行排序:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
在运行时使用 COLLATE
会对性能产生影响,因为查询期间每个列都必须进行转换。所以在对大型数据集应用此功能之前要三思而后行。
MySQL 参考文献:
排序规则是有关字符串应如何排序和比较的信息。
它包含了大小写敏感性,例如是否 a
= A
,特殊字符考虑因素,例如是否 a
= á
,以及字符顺序,例如是否 O
< Ö
。