SQL 服务器 - 排序规则 - Latin1_General_CI_AS 和 Latin1_General_CS_AS 之间的区别

SQL Server - collation - difference between Latin1_General_CI_AS and Latin1_General_CS_AS

如何看出

之间的区别
SELECT * 
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_CS_AS

SELECT * 
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_CI_AS

?。这组字符没有区别。

干杯 巴尔托斯

向您的值集添加一个整数 ID 列,并在按 C 排序后按该列排序。

SELECT * 
FROM (VALUES  (1,'a'),(2,'b'),(3,'y'),(4,'z'),(5,'A'),(6,'B'),(7,'Y'),(8,'Z'),(9,'a'),(10,'b'),(11,'y'),(12,'z')) V(ID,C)
ORDER BY C COLLATE Latin1_General_CS_AS,ID

SELECT * 
FROM (VALUES (1,'a'),(2,'b'),(3,'y'),(4,'z'),(5,'A'),(6,'B'),(7,'Y'),(8,'Z'),(9,'a'),(10,'b'),(11,'y'),(12,'z')) V(ID,C)
ORDER BY C COLLATE Latin1_General_CI_AS,ID

对于第一个 table,区分大小写,'a' <> 'A',因此将它们分开处理。我们的排序是先放小写a,然后按ID(1, 9)排序,再后面放大写A.

ID  C
1   a
9   a
5   A

在第二个table,'a'='A',所以他们在同一组中处理,3个a(或A)值在ID号上一起排序

ID  C
1   a
5   A
9   a

对于 b、y 和 z,这种模式继续存在。