Din*_*mar 3 mysql collation utf-8
这是情况:
但是我找不到“ utf8_bin vs utf8_general_cs ”的帖子。那么,它们是一样的吗?如果不是,它们之间有什么区别?
注意:我已经检查过utf8_general_cs在默认 MySQL 中不可用。我可以知道为什么吗?
不幸的是,二进制排序规则与区分大小写的排序规则相同的概念非常普遍。
但是,它们在功能上非常不等效。有四个方面可以看出行为差异(我知道至少有四个):
组合字符
考虑有一个小写ü
(“u”带分音符)和一个大写Ü
(“U”带分音符)。两种类型的排序规则都能够区分它们。
现在,考虑有一个大写字母U
和一个?
(组合分音符)。当组合字符放在非重音 之后时U
,您会得到U?
. 视觉上它与单曲相同Ü
(“U”带分音符)。并且区分大小写(甚至区分重音)的归类将它们看起来相同,即使一个是单个代码点而另一个是两个代码点的组合。但是二进制排序规则不能将它们比较为相等,因为它们不是相同的代码点(甚至不是相同数量的代码点)。
全角字符
区分大小写但不区分宽度的排序规则将能够等同于=?=
和=o=
。但是,二进制排序规则不能将它们视为相等,因为它们是不同的代码点。
口音不敏感
区分大小写但不区分重音的排序规则将能够等同于o
和ô
。但是,二进制排序规则不能将它们视为相等,因为它们是不同的代码点。
排序
区分大小写的排序规则将整理~
之前a
和A
之后。但是,二进制排序将那些相同的字符进行排序:A
然后a
然后~
。
所有这些都记录在我的以下帖子中:
它以 Microsoft SQL Server 的形式呈现,但行为基于 Unicode 标准定义的规则,这些规则在 RDBMS、语言、操作系统等之间应该是相同的(由于正在使用哪个版本的 Unicode 标准而略有不同) Unicode 只是一个标准,并且在不同供应商之间的实施略有不同)。
我已经检查过 utf8_general_cs 在默认 MySQL 中不可用。我可以知道为什么吗?
我的猜测是“通用”排序规则已经过时,已被更新的“unicode”和特定于文化的排序规则所取代。该文件(中途下来的页面,段落开头“对于任何Unicode字符集, ”)甚至指出:
utf8_general_ci
是不支持扩展、收缩或可忽略字符的旧排序规则。它只能在字符之间进行一对一的比较。
“unicode”排序规则可能是默认的排序权重和排序规则。特定于文化的排序规则定制权重和规则以适合该文化(当默认值不正确时)。有关为什么会有不同排序规则的更多信息,请参阅我对以下 SO 问题的回答:
nvarchar (Unicode) 列的 COLLATIONS 有什么意义?
归档时间: |
|
查看次数: |
2025 次 |
最近记录: |