Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在排序规则之间保留字符_Sql_Sql Server - Fatal编程技术网

Sql 在排序规则之间保留字符

Sql 在排序规则之间保留字符,sql,sql-server,Sql,Sql Server,我正在使用SQLServer2012。我有一个问题,我有一个数据库,它使用丹麦语、挪威语和拉丁语 我有一些波兰语字符(将来还有许多其他语言),它们的显示方式不同 例如,如果您具有以下字符: żśąłćĠĠę 它在数据库中显示如下: 萨尔塞兹酒店 问题是我无法更改排序规则(说来话长,但由于兼容性问题,很快就会更改) 在Customers表中有一个名为Address2(varchar)的列 在我的更新声明中,我尝试了: UPDATE Customers SET ADDRESS = N'żśąółćę

我正在使用SQLServer2012。我有一个问题,我有一个数据库,它使用丹麦语、挪威语和拉丁语

我有一些波兰语字符(将来还有许多其他语言),它们的显示方式不同

例如,如果您具有以下字符:

żśąłćĠĠę

它在数据库中显示如下:

萨尔塞兹酒店

问题是我无法更改排序规则(说来话长,但由于兼容性问题,很快就会更改)

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

在我的更新声明中,我尝试了:

UPDATE Customers SET ADDRESS = N'żśąółćęźę'  WHERE customerid = 'mycustomerID'
即使在值之间使用N,它仍然显示不正确的输出


我尝试创建另一个数据类型为Nvarchar的列,这似乎工作得很好。但我想避免这种情况

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

因此,唯一的选择是将列更改为NVARCHAR?我听说应该可以使用从字符返回的ASCII值与COLLATE[COllationNAME]组合使用。。你知道这方面的情况吗?似乎不起作用:得到了这个输出:zsaólceze zsaólceze zsaólceze zsaólceze zsaólceze所有这些都是一样的?文本的解释不同(根据当前的数据库排序)。请参阅更新。存在差异。我也尝试过创建一个具有波兰排序规则的数据库,字符显示得很好。我想我可以使用selectascii('ż')来获取ASCII值,然后在另一个选项卡中使用不同的排序规则-不走运。ASCII值根据排序规则完全不同。