SQL中的中欧字符

时间:2017-01-06 08:33:02

标签: sql-server collation

我有一个问题。我有数据存储在SQL服务器上,中央欧洲字符如"č", "ř", "ž"等。在数据库中我有“Czech_CI_AS”排序规则,应该接受这些字符。但是当我尝试用这样的字符选择例如街道名称时:

SELECT *
FROM Street where Name = 'Čáslavská'

它什么也没归我 当我删除“č”时,它会返回我需要的内容。

SELECT *
FROM Street where Name like '%áslavská'

我在nvarchar类型中有此列。但我不能在字符串之前使用N字符,因为外部应用程序使用此表进行读取和选择是自动生成的。

这是解决方案吗?或者我有什么不对劲?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

@YuriyTsarkov真的在这里保留了信誉。详细说明他的答案。

来自MSDN

  

使用字母N前缀Unicode字符串常量。如果没有N前缀,则将字符串转换为数据库的默认代码页。此默认代码页可能无法识别某些字符。

示例

-- Storing Čáslavská in two vars, with and without N prefix.
DECLARE @Test_001 NVARCHAR(255)  =  'Čáslavská' COLLATE Czech_CI_AS;
DECLARE @Test_002 NVARCHAR(255)  = N'Čáslavská' COLLATE Czech_CI_AS;

-- Test output.
SELECT 
    @Test_001   AS T1,
    @Test_002   AS T2
;

返回

T1         T2
Cáslavská  Čáslavská

答案 1 :(得分:0)

您需要更新所有外部应用程序代码以使用带有N的选择,或者,您需要将列的排序规则更改为与外部应用程序使用的相同。这可能会导致一些数据丢失。