在排序规则之间保留字符

时间:2014-04-09 11:27:46

标签: sql sql-server

我正在使用SQL Server 2012.我有一个问题,我有一个使用Danish_Norwegian_CI_AS的数据库。

我有一些不同的波兰字符(以及将来许多其他语言)。

例如,如果有这些字符:

żśąółćęźę

它在数据库中显示如下:

zsaólceze

问题在于我无法更改排序规则(长篇故事,但由于兼容性问题很快)。

我在Customers表中有一个名为Address2(varchar)的列。

在我的更新声明中,我试过:

UPDATE Customers SET ADDRESS = N'żśąółćęźę'  WHERE customerid = 'mycustomerID'

即使我在值之间使用N,它仍会显示错误的输出。

我试图创建另一个数据类型为Nvarchar的列,这似乎完美无缺。但我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

嗯,你不能。排序不仅影响字符串的比较和排序,还影响字符的存储方式,正如您自己发现的那样。唯一的选择是创建具有正确排序规则的另一列或将数据类型更改为nvarchar

请参阅此示例:

create database ct collate Polish_CI_AS;
go
use ct;
go

-- any difference here?
select cast('żśąółćęźę' as varbinary)
use master;
go
select cast('żśąółćęźę' as varbinary)
go

use ct;
declare @t table 
(c1 varchar(1000) collate Danish_Norwegian_CI_AS, c2 nvarchar(1000) collate Danish_Norwegian_CI_AS,
c3 varchar(1000) collate Polish_CI_AS, c4 nvarchar(1000) collate Polish_CI_AS)

insert @t
values ('żśąółćęźę', 'żśąółćęźę', 'żśąółćęźę', 'żśąółćęźę')

select * from @t