質問で提供される情報は多くありません。私たちが知っているのは:
- 列は
Thai_CI_AS
の照合を使用しています (少なくとも、質問が述べているように聞こえます) - タイ文字が渡されています
- 列に格納されるのは次のとおりです:
???
ただし、それだけで次の 2 つのことが推測できます。
<オール> <リ>
着信文字列は NVARCHAR
でもありません パラメータ/変数、または大文字の「N」が前に付いた文字列リテラルではありません
そして
<リ>クエリが実行されている DB (必ずしもテーブルが存在する DB) のデフォルトの照合は not です タイの照合。
宛先列が VARCHAR
かどうかはわかりません または NVARCHAR
、しかし、列の照合がタイの照合であるかどうかは問題ではありません (それは VARCHAR
を許可するため) タイ文字を保持するデータ、および NVARCHAR
関係なく動作します)。
どちらかの場合 :
- <リ>
着信文字列は NVARCHAR
を使用します パラメータ (または文字列リテラルの場合は、大文字の "N" を前に付ける)、
または
<リ>クエリは、タイのデフォルトの照合を持つ DB で実行されました
その後、タイ文字は期待どおりに保存されます。
次の例は、この動作を示しています。 タイ語の文字コムット U+0E5B
を使用しています Korean_100_CS_AS_KS_WS_SC
を持つインスタンス インスタンスレベルのデフォルトの照合。宛先列には Thai_CI_AS
の照合があります .まず、「現在の」DB はそうではありません タイ語のデフォルトの照合順序がある場合、この文字を 2 回追加します。1 回目は "N" のプレフィックスを付け、もう 1 回は文字列リテラルにプレフィックスを付けません:
USE [tempdb];
-- DROP TABLE #Thai;
CREATE TABLE #Thai (ID INT IDENTITY(1, 1), Col1 VARCHAR(50) COLLATE Thai_CI_AS);
-- In a DB with a non-Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');
INSERT INTO #Thai (Col1) VALUES (N'๛');
次に、できる DB に切り替えます タイ語のデフォルトの照合を使用し、接頭辞のない文字列のみを挿入します ("N" 接頭辞付き文字列を再テストする必要はありません):
USE [other_db];
-- In a DB with a Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');
SELECT * FROM #Thai;
結果は次のとおりです。
ID Col1
1 ?
2 ๛
3 ๛
ご覧のとおり (以下のポイント # は、上記の結果の ID # に関連しています):
<オール>?