【发布时间】:2010-07-24 11:27:17
【问题描述】:
我了解字符集,但我不了解排序规则。我知道你在 Mysql 或任何 RDBMS 中的每个字符集都有一个默认排序规则,但我仍然不明白!有人可以用外行的话解释一下吗?
提前谢谢你;-)
【问题讨论】:
-
你认为排序规则是什么意思?
标签: sql mysql sql-server oracle rdbms
我了解字符集,但我不了解排序规则。我知道你在 Mysql 或任何 RDBMS 中的每个字符集都有一个默认排序规则,但我仍然不明白!有人可以用外行的话解释一下吗?
提前谢谢你;-)
【问题讨论】:
标签: sql mysql sql-server oracle rdbms
数据库排序规则的要点是确定数据的排序和比较方式。
字符串比较区分大小写
SELECT "New York" = "NEW YORK";`
对于不区分大小写的排序规则将返回 true;区分大小写的为 false。
哪个排序规则可以通过排序规则名称中的_ci 和_cs 后缀来判断。 _bin 排序规则进行二进制比较(字符串必须 100% 相同)。
变音/重音字符的比较
排序规则还确定在字符串比较中是否将重音字符视为它们的拉丁基对应物。
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
在前一种情况下将返回 true;后者为假。您需要阅读每个排序规则的描述以找出哪个是哪个。
字符串排序
排序规则会影响字符串的排序方式。
例如,
变音符号Ä Ö Ü在芬兰语/瑞典语字母表latin1_swedish_ci的字母表末尾
在德国 DIN-1 排序中它们被视为A O U (latin_german1_ci)
和德国 DIN-2 分类中的 AE OE UE (latin_german2_ci)。 (“电话簿”排序)
在latin1_spanish_ci 中,“ñ”(n-波浪号)是“n”和“o”之间的单独字母。
当使用非拉丁字符时,这些规则将导致不同的排序顺序。
在运行时使用排序规则
您必须为表和列选择排序规则,但如果您不介意性能下降,您可以在运行时使用 COLLATE 关键字强制数据库操作进入某个排序规则。
这将使用德国 DIN-2 排序规则按 name 列对 table 进行排序:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
在运行时使用COLLATE 会影响性能,因为在查询期间必须转换每一列。所以在应用这个做大数据集之前要三思。
MySQL 参考资料:
【讨论】:
排序规则是关于如何对字符串进行排序和比较的信息。
它包含例如大小写敏感性,例如是否a = A,特殊字符考虑,例如是否a = á,以及字符顺序,例如是否OÖ.
【讨论】: