我有一个问题。我有数据存储在SQL服务器上,中央欧洲字符如"č", "ř", "ž"
等。在数据库中我有“Czech_CI_AS”排序规则,应该接受这些字符。但是当我尝试用这样的字符选择例如街道名称时:
SELECT *
FROM Street where Name = 'Čáslavská'
它什么也没归我 当我删除“č”时,它会返回我需要的内容。
SELECT *
FROM Street where Name like '%áslavská'
我在nvarchar
类型中有此列。但我不能在字符串之前使用N字符,因为外部应用程序使用此表进行读取和选择是自动生成的。
这是解决方案吗?或者我有什么不对劲?
感谢您的帮助
答案 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的选择,或者,您需要将列的排序规则更改为与外部应用程序使用的相同。这可能会导致一些数据丢失。