DECLARE @foo TABLE (bar varchar(2))
INSERT @foo VALUES ('z'), ('æ'), ('ø'), ('å'), ('ss'), ('ß'), ('a'), ('ä')
SELECT * FROM @foo ORDER BY bar COLLATE Finnish_Swedish_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Norwegian_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Latin1_General_100_CS_AS --german (western europe) and default
SELECT * FROM @foo ORDER BY bar COLLATE German_PhoneBook_100_CS_AS
基本上,如何对字符串进行排序和比较。
例子:
比较:
排序:
特殊字符等价
维基百科
一些 SQL (SQL Server 2008+)
词源
“排序规则”可能在词源学网站上得到最好的定义,
在过去的 600 年里,它根本没有改变。“整理”的意思是“汇集”,无论是在数据库中按时间顺序或其他方式排序一本书,都是一样的。
计算机科学
当它适用于计算机科学时,我们正在做的是将存储机制与排序分离。您可能听说过ASCII-betical。那是指基于ASCII字符的二进制编码的比较。在该系统中,存储和整理是两个相同的。如果 ASCII 标准化的“编码”改变了,那么“排序规则”(顺序)也会改变。
POSIX 开始用
LC_COLLATE
. 但是当我们进入 Unicode 时,也出现了一个用于标准化排序规则的联盟:ICU。SQL
在 SQL 规范中有两个扩展来提供排序规则,
F690
:“整理支持:包括
collation name
、和。collation clause
_collation definition
drop collation
F692
:扩展排序规则支持,包括将不同的默认排序规则附加到架构中的列。
本质上,这些提供了排序规则的能力,为运算符
CREATE
和DROP
排序指定它们,并为列定义默认值。有关 SQL 提供的更多信息,请查看,
例子
与其粘贴一个有限的例子,这里是一个相当广泛的 PostgreSQL 测试套件。至少检查第一个链接并寻找
'Türkiye' COLLATE "tr-x-icu" ILIKE '%KI%' AS "false"
collate.icu.utf8.out
collate.linux.utf8.out
collate.out
可能不值得一试,但我把它放在这里是为了完整性,无聊的 POSIX 检查。排序。打孔卡被整理。整理平面文件记录。这不是数据库独有的。
它对文本来说是不言自明的,但对于存储为字符的二进制数据,它可能会更棘手。