ORDER BY ...在SQL Server中收集

Oli*_*eux 8 sql-server collation case-sensitive sql-order-by

在SQL Server下.表包含一些具有不同情况的文本.我想对它们进行排序区分大小写,并且认为,一个COLLATEORDER 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


Rem*_*anu 8

因为这正确的区分大小写的排序规则排序顺序.在Case Sensitive Collat​​ion Sort Order中解释了为什么会出现这种情况,它与Unicode规范进行排序有关.aa将提前排序,AAAA将提前排序ab.