gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:50:16 24 4
gpt4 key购买 nike

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

在 SSMS 中执行
选择 'éÉâÂàÀëËçæà' 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

为什么?

最佳答案

查询中的那些字 rune 字首先根据数据库设置的排序规则转换为 varchar 字符串,然后是 collation cast生效。

如果你想传递这样的字 rune 字并确保所有字符都被忠实地表示,最好将它们作为 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)

关于sql - 为什么不显式 COLLATE 覆盖数据库排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4211750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com