2

我在 SQL Server 2008 R2 dev 上,服务器默认排序规则是 Cyrillic_General_CI_AS

在 SSMS 中执行
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS

SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI   

输出

  • eEaAaAeEc?a on(in ocntext of/use dbName) 使用默认排序规则 Cyrillic_General_CI_AS
  • éÉâÂàÀëËçæà 在数据库上使用默认排序规则 Latin1_General_CI_AS

为什么?

4

2 回答 2

6

您查询中的这些字符文字首先在数据库设置的任何排序规则下转换为 varchar 字符串,然后您的排序规则转换生效。

如果要传递此类字符文字并确保忠实地表示所有字符,最好将它们作为 nvarchar 文字传递:

create database CollTest collate Cyrillic_General_CI_AS
go
use CollTest
go
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS   
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI
go
SELECT N'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS   
SELECT N'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI
go

输出:

-----------
eEaAaAeEc?a

(1 row(s) affected)


-----------
eEaAaAeEc?a

(1 row(s) affected)


-----------
éÉâÂàÀëËçæà

(1 row(s) affected)


-----------
éÉâÂàÀëËçæà

(1 row(s) affected)
于 2010-11-18T08:31:49.880 回答
1

根据此字符表Cyrillic_General_CI_AS 不包含该字符æ?如果您真正使用默认值而不是您在 select 语句中的内容,这将解释为什么您会看到 a在它的位置。

于 2010-11-18T05:28:58.647 回答