Answers:
基本上,如何对字符串进行排序和比较。
例子:
比较:
排序:
特殊字符对等
一些SQL(SQL Server 2008+)
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
“整理”最好在etymology.com上定义,
14c。后期,“集合和比较的行为”
在过去的600年中,它完全没有改变。“整理”是指“汇集”,无论是按时间顺序排列还是按照数据库顺序排列,都是相同的。
由于它适用于计算机科学,所以我们正在做的是将存储机制与订购分开。您可能听说过ASCII-betical。那是指基于ASCII字符的二进制编码的比较。在该系统中,存储和排序规则是相同的。如果ASCII标准化的“编码”曾经更改过,那么“排序规则”(顺序)也会改变。
POSIX开始用打破这一点LC_COLLATE
。但是,当我们进入Unicode时,也出现了一个联盟来标准化排序规则:ICU。
在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检查。