1
在我的數據庫中,我有翻譯表,其中包含用於將不尋常的Unicode字符轉換爲英文字符的字典。 Unicode字符是此表的主鍵。 而前一段時間,我遇到了一個問題:一些不同的Unicode字符對於T-SQL是相同的,它們在同一時間沒有任何東西。爲什麼在T-SQL中一些unicode字符等於沒有?
我可以找到區分另一種方法('='是無用的),甚至設法將其中一個插入到數據庫中。但是,由於主鍵約束,我不能插入多於一個,而它們全部相等。
我發現只是4:ŞşŢţ。但是4只足以破壞我的系統。
而且這是他們如何做人短,但內容豐富例如:
DECLARE @Strings TABLE(id int, ucode nvarchar(50))
INSERT INTO @Strings (id, ucode)
SELECT 1, N'A' UNION -- Usual char
SELECT 2, N'Ы' UNION -- Some unicode char
SELECT 3, N'Ф' UNION -- Another unicode char
SELECT 5, N' ' UNION -- space
SELECT 6, N'Ș' UNION -- Unusual unicode char
SELECT 7, N'Ț' UNION -- Unusual unicode char
SELECT 8, N'some_string' UNION -- example string
SELECT 9, N'some_string ' UNION -- example string with space
SELECT 10, N'some_string Ș' UNION -- example string with unusual char
SELECT 11, N'some_string Ț' -- one more
SELECT * FROM @Strings
SELECT * FROM @Strings WHERE ucode = N'A' -- Good one (1 result)
SELECT * FROM @Strings WHERE ucode = N'Ș' -- Magic (3 results)
SELECT * FROM @Strings WHERE ucode = N'Ț' -- Magic (3 results)
SELECT * FROM @Strings WHERE ucode = '' -- Magic (3 results)
SELECT * FROM @Strings WHERE ucode = 'some_string' -- Magic (4 results)
你有什麼建議嗎?
你使用的是什麼排序規則,你在哪個版本上? –
馬丁史密斯,我嘗試了SQL_Latin1_General_CP1_CI_AS和Cyrillic_General_CI_AS –
還有你想要的大小寫和重音敏感度的語義? –