Oli*_*eux 8 sql-server collation case-sensitive sql-order-by
在SQL Server下.表包含一些具有不同情况的文本.我想对它们进行排序区分大小写,并且认为,一个COLLATE
在ORDER BY
会做到这一点.它没有.为什么?
CREATE TABLE T1 (C1 VARCHAR(20))
INSERT INTO T1 (C1) VALUES ('aaa1'), ('AAB2'), ('aba3')
SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CS_AS
SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CI_AS
Run Code Online (Sandbox Code Playgroud)
两个查询都返回相同的内容,即使第一个查询是区分大小写的"CS"
aaa1
AAB2
aba3
Run Code Online (Sandbox Code Playgroud)
(在第一种情况下,我想要AAB2, aaa1, aba3
)
我的服务器是SQL Server Express 2008(10.0.5500),其默认服务器排序规则是Latin1_General_CI_AS
.
数据库的整理也是Latin1_General_CI_AS
如此.
如果我用SQL_Latin1_General_CP1_CS_AS
它代替,结果仍然是一样的Latin1_General_CS_AS
.
Mar*_*ith 10
您需要一个二进制排序规则,用于您A-Z
之前排序的所需排序顺序a-z
.
SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin
Run Code Online (Sandbox Code Playgroud)
CS整理排序 aAbB ... zZ
因为这是正确的区分大小写的排序规则排序顺序.在Case Sensitive Collation Sort Order中解释了为什么会出现这种情况,它与Unicode规范进行排序有关.aa
将提前排序,AA
但AA
将提前排序ab
.