Sql server 2008 带有中文空白的Sql server字符串比较问题

Sql server 2008 带有中文空白的Sql server字符串比较问题,sql-server-2008,whitespace,Sql Server 2008,Whitespace,我的sql server数据库中有一条记录,其nvarchar列的值如下: '穂 坂' 第二个字符是Unicode值0x20,它是一个简单的空格字符 该列上存在唯一的键约束 尝试插入以下值时,我遇到唯一密钥冲突: '穂 坂' 在此字符串中,第二个字符是Unicode值0x3000,这是一个中文空格字符 为什么我会得到唯一密钥冲突?为什么sql server将中文空白字符“转换”为简单空格 提前感谢您的任何见解! 顺便说一句,我的排序规则是SQL\u Latin1\u General\u CP1\

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

该列上存在唯一的键约束

尝试插入以下值时,我遇到唯一密钥冲突: '穂 坂' 在此字符串中,第二个字符是Unicode值0x3000,这是一个中文空格字符

为什么我会得到唯一密钥冲突?为什么sql server将中文空白字符“转换”为简单空格

提前感谢您的任何见解!
顺便说一句,我的排序规则是SQL\u Latin1\u General\u CP1\u CI\u。

可能是您的排序规则是

考虑:

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

首先,您可以在SQL中使用适当的字符串类型,包括排序规则。 其次,可以使用以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

我尝试转换为对宽度敏感的排序规则(Latin1_General_CI_AS_WS),但插入仍然会导致唯一密钥冲突。