我不理解Collation是什么?(Mysql,RDBMS,字符集)

14

我了解字符集,但不理解排序规则。我知道在MySQL或任何关系数据库管理系统中,每个字符集都有一个默认排序规则,但我仍然不理解!有人能以通俗易懂的方式解释一下吗?

提前致谢;-)


你认为排序规则是什么意思? - msw
2个回答

55

数据库排序规则的主要目的是确定数据如何进行排序和比较。

字符串比较的大小写敏感性

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 参考文献:


这里也加一分。当人们花时间以真正有用的方式解释事情时,这是非常棒的。干得好先生。 - cbmeeks

4

排序规则是有关字符串应如何排序和比较的信息。

它包含了大小写敏感性,例如是否 a = A,特殊字符考虑因素,例如是否 a = á,以及字符顺序,例如是否 O < Ö


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