为什么显式 COLLATE 不覆盖数据库排序规则?

2024-02-16

我使用的是 SQL Server 2008 R2 开发版,服务器默认排序规则是 Cyrillic_General_CI_AS

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

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

outputs

  • eEaAaAeEc?a 位于(在 ocntext of/use dbName 中)具有默认排序规则的数据库 Cyrillic_General_CI_AS
  • éÉââàÀëËçæà 在具有默认排序规则 Latin1_General_CI_AS 的数据库上

Why?


查询中的这些字符文字首先根据数据库设置的任何排序规则转换为 varchar 字符串,然后您的排序规则转换 http://msdn.microsoft.com/en-us/library/ms184391.aspx生效。

如果要传递此类字符文字并确保忠实表示所有字符,最好将它们作为 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

Output:

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

(1 row(s) affected)


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

(1 row(s) affected)


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

(1 row(s) affected)


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

(1 row(s) affected)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么显式 COLLATE 不覆盖数据库排序规则? 的相关文章

随机推荐