私のデータベースには、珍しい Unicode 文字を英語の文字に変換するための辞書を含む変換テーブルがあります。Unicode 文字がこのテーブルの主キーです。そして、しばらく前に問題に直面しました.T-SQLではいくつかの異なるUnicode文字が同じであり、同時に何にも等しくありません.
それぞれを区別する方法を見つけることができ(「=」は役に立たない)、そのうちの1つをデータベースに挿入することさえできました。しかし、主キーの制約により、すべてが等しいのに複数挿入することはできません。
発見したのは 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)
何か提案はありますか?