我正在使用SQL Server 2012.我有一个问题,我有一个使用Danish_Norwegian_CI_AS的数据库。
我有一些不同的波兰字符(以及将来许多其他语言)。
例如,如果有这些字符:
żśąółćęźę
它在数据库中显示如下:
zsaólceze
问题在于我无法更改排序规则(长篇故事,但由于兼容性问题很快)。
我在Customers表中有一个名为Address2(varchar)的列。
在我的更新声明中,我试过:
UPDATE Customers SET ADDRESS = N'żśąółćęźę' WHERE customerid = 'mycustomerID'
即使我在值之间使用N,它仍会显示错误的输出。
我试图创建另一个数据类型为Nvarchar的列,这似乎完美无缺。但我想避免这种情况。
答案 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