我懂字符集,但不懂排序规则。我知道你会得到一个默认的排序规则,其中包含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