在比較兩個字符串時,SQL Server 2008似乎刪除了一些unicode字符。請看下面的表格:SQL Server 2008和Unicode字符比較
CREATE TABLE [dbo].[Test](
[text] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[text] ASC
))
現在,如果我插入一些行Unicode字符:
insert into Test values(N'it᧠')
insert into Test values(N'it')
我得到一個唯一約束的例外,即使值是不同的。我在這裏使用默認的數據庫排序規則,即SQL_Latin1_General_CP1_CI_AS。
Violation of PRIMARY KEY constraint 'PK_Test'. Cannot insert duplicate key in object 'dbo.Test'.
注意,這並不會發生所有Unicode字符,但僅限於一些字符,但我一直沒能找出其中的unicode範圍究竟是有問題的。例如,dingbat 0x2757(❗)在比較中被移除,但是0x2764(♥)不是。我想這與0x2757來自一個更新的unicode標準有關。
所以問題是,是否有任何方法使SQL Server 2008與這些字符一起工作,或者,我是否可以通過編程方式檢測它們(在C#中,通過unicode範圍或某些類型)並事先刪除它們?
檢查了這一點http://stackoverflow.com/questions/4144767/unicode-characters-in-sql-table – Bayeni 2014-10-28 08:16:08
你應該設置您的字段類型爲'nvarchar' – 2014-10-28 08:20:34
@Bayeni,並不真正有幫助。我正在使用nvarchar和N前綴。 unicode值正確顯示在表中,問題在於比較。 – 2014-10-28 08:22:30