我懂字符集,但不懂排序规则。我知道你会得到一个默认的排序规则,其中包含MySQL或任何RDBMS中的每个字符集,但我仍然没有得到它!有人能用外行术语解释一下吗?
提前感谢;-)

最佳答案

数据库排序规则的要点是确定如何对数据进行排序和比较。
字符串比较的区分大小写

SELECT "New York" = "NEW YORK";`

对于不区分大小写的排序规则将返回true;对于区分大小写的排序规则将返回false。
哪个排序规则可以通过排序规则名称中的_ci_cs后缀来判断。_bin排序进行二进制比较(字符串必须100%相同)。
变音/重音字符的比较
排序规则还确定在字符串比较中,重音字符是否被视为它们的拉丁基对应字符。
SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

在前一种情况下将返回真;在后一种情况下将返回假。您需要阅读每个排序规则的描述,以找出哪个是哪个。
字符串排序
排序规则影响字符串的排序方式。
例如,
umlautsÄ Ö Ü在芬兰语/瑞典语字母表中位于字母表的末尾latin1_swedish_ci
在德国DIN-1排序中,它们被视为A O U
以及德国DIN-2排序(latin_german1_ci)中的“asAE OE UE”。(电话簿排序)
latin_german2_ci中,“n-tilde”是“n”和“o”之间的单独字母。
使用非拉丁字符时,这些规则将导致不同的排序顺序。
在运行时使用排序规则
必须为表和列选择排序规则,但如果不介意性能受到影响,则可以在运行时使用latin1_spanish_ci关键字强制数据库操作进入某个排序规则。
这将使用德国DIN-2排序规则,按COLLATE列对table进行排序:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

在运行时使用name会影响性能,因为在查询期间必须转换每一列。所以在应用之前要三思而后行,做大数据集。
MySQL参考:
Character Sets and Collations That MySQL Supports
Examples of the Effect of Collation
Collation issues

10-04 12:28
查看更多