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,这种模式继续存在。
如何看出
之间的区别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,这种模式继续存在。