与中国空白的sql server字符串比较问题

时间:2010-05-17 20:03:40

标签: sql-server-2008 whitespace

我的sql server数据库中有一条记录,其中nvarchar列的值如下: '穂坂' 第二个字符是Unicode值0x20,它是一个简单的空格字符。

该列有一个唯一的键约束。

当我尝试插入以下值时,我得到一个唯一的密钥违规: '穂坂' 在此字符串中,第二个字符是Unicode值0x3000,它是一个中文空格字符。

为什么我会获得唯一的密钥违规?为什么sql server将中文空格字符“转换”为一个简单的空格?

提前感谢任何见解! 顺便说一句,我的排序规则是SQL_Latin1_General_CP1_CI_AS。

2 个答案:

答案 0 :(得分:1)

首先,您可以在SQL中使用approriate字符串类型,包括排序规则。 其次,您可以使用以N前缀开头的UNICODE字符串。

示例:

SELECT CAST(N'穂 坂' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32)) 

=> 0x427A20004257

SELECT CAST(N'穂 坂' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32))

=> 0x427A00304257

答案 1 :(得分:0)

可能是您的排序规则为width-insensitive

考虑:

  • 将数据库的排序规则更改为符合您需求的排序规则,并且宽度敏感。
  • 将该特定列的排序规则更改为宽度敏感的列。这可能/将在整个存储过程中导致更多COLLATE clauses等。不确定这是否是DBA推荐的做法。

alt text