有没有“Unicode 排序规则”之类的东西?

Posted

技术标签:

【中文标题】有没有“Unicode 排序规则”之类的东西?【英文标题】:Is there such thing as 'Unicode collation'? 【发布时间】:2012-07-07 14:41:08 【问题描述】:

如果不是,那么实际上是什么 Sql Server collation?也许我对排序规则(作为一个概念)的理解是错误的。

我不希望将我的排序规则指定为希腊语、冰岛语甚至西欧语。我希望能够使用 Unicode 支持的任何语言。

(我使用的是 MSSQL 2005)

更新:好的,我换个说法:是否有通用的、独立于文化的排序规则可用于任何文化的文本?我知道它不会包含特定于文化的规则,例如匈牙利语中的 'ty' 或德语中的 ß=ss,但会提供一致且大部分可接受的结果。

是否有任何文化特定的排序规则?

【问题讨论】:

然后使用nvarchar 等代替varchar。排序规则仍然在确定比较(并因此排序)规则方面发挥作用,但不会影响在这种情况下可以存储的字符范围。 dba.stackexchange.com/a/31861/19091 很好地解释了排序规则在 SQL 服务器上下文中的作用。 【参考方案1】:

嗯,总是有一个像 Latin1_General_BIN2 这样的二进制排序规则。它以数字顺序存储代码点,这可以是任意的。虽然它不是特定于文化的(尽管有名称)。

听起来没有任何智能方法可以将来自多种语言/文化的数据排序在一起,因此您可以做的就是按二进制值排序,而不是半生不熟的解决方案。

【讨论】:

【参考方案2】:

这是一篇了解什么是排序规则的好文章,又短又甜:SQL Server and Collation。

排序规则可以让您对数据进行比较和排序。据我所知,没有什么比 Unicode 排序规则更好的了。

【讨论】:

【参考方案3】:

有一个默认的 Unicode 排序规则,即 "默认 Unicode 排序元素表 (DUCET)", Unicode 排序算法技术标准文档中描述 http://www.unicode.org/reports/tr10/.

但有人称它为默认的 Unicode 排序规则,而不是 Unicode 排序规则,因为当然有更多 一个——例如匈牙利语的 unicode.org 图表 http://www.unicode.org/cldr/charts/28/collation/hu.html 描述了 Unicode 的匈牙利排序规则 字符不同于 DUCET。

自从问了这个问题 SQL Server 排序规则变得更加支持 Unicode https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-2017。同时,一些开源 DBMS 通过整合 ICU(Unicode 国际组件)库,获得了支持 DUCET 和其他 Unicode 排序规则的能力。

【讨论】:

以上是关于有没有“Unicode 排序规则”之类的东西?的主要内容,如果未能解决你的问题,请参考以下文章

是否存在 utf8_unicode_cs 排序规则?

unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度

SQL Server 与 MySQL 的 unicode_ci 排序规则的类似物是啥?

MySql Unicode 排序规则 utf8mb4_german2_ci 未找到 *** 德语变音符号排序规则 ***

MySQL 排序规则

Couchbase 索引