我的sql server数据库中有一条记录,其中nvarchar列的值如下: '穂坂' 第二个字符是Unicode值0x20,它是一个简单的空格字符。
该列有一个唯一的键约束。
当我尝试插入以下值时,我得到一个唯一的密钥违规: '穂坂' 在此字符串中,第二个字符是Unicode值0x3000,它是一个中文空格字符。
为什么我会获得唯一的密钥违规?为什么sql server将中文空格字符“转换”为一个简单的空格?
提前感谢任何见解! 顺便说一句,我的排序规则是SQL_Latin1_General_CP1_CI_AS。
答案 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。
考虑: