2016-12-07 5 views
0

私はMS SQLServer上にnVarcharカラムを持つテーブルを持っています。私は、挿入ステートメントを使用してUTF-8文字を保存しています。 ???として保存されます。同じ値を使用して同じ列を更新ステートメントで更新すると、正しく保存されます。UTF-8文字は??と保存されます。更新時に正しく保存されます

ここで何が問題になるのですか?使用される照合順序は次のとおりです。SQL_Latin1_General_CP1_CI_AS

答えて

2

挿入文を表示します。あります - かなりおそらく - N欠落は:

DECLARE @v NVARCHAR(100)='Some Hindi from Wikipedia मानक हिन्दी'; 
SELECT @v; 

結果:Some Hindi from Wikipedia ???? ??????

SET @v=N'Some Hindi from Wikipedia मानक हिन्दी'; 
SELECT @v; 

結果:Some Hindi from Wikipedia मानक हिन्दी

文字列リテラルの前でNは、コンテンツを解釈するためにSQL-Serverに指示unicode。そうでなければ、utf-8として扱われ、すべての文字を扱うことはできません。

+0

あなたのクイック返信ありがとうございます。しかし、類似の構造と照合を持つ別のテーブルでは、N接頭辞を付けずに正しく挿入されます。私はここに何があったのだろうと思っていた。 – Supriya

+0

@Supriya簡単な答え:**しないでください!**あなたのテキストを正しく読むためにシステムの能力に頼るなら、それはうまくいくでしょうし、次回はそうでないでしょう... 'NVARCHAR'を扱うことは常に** ** 'N'Some string''でリテラルを使ってください。それ以外の場合はギャンブルをしています... – Shnugo

+0

素早く答えてくれてありがとう...問題が発生したテーブルの正確なコピーを作成しました。それから、スキーマのすべてのテーブル(nvarcharのすべて)でいくつかのテーブルをチェックしたところ、一貫した方法でうまく動作します。だから私はこの特定のテーブルの特別な問題が何であるか理解できません。私はNの接頭辞を付ける必要があるというあなたの主張を得ます。しかし、私はこの挿入をjavaから試しています、そして、それはまだ他のテーブルで一貫して動作する方法を私に打ち勝ちます。 insert文はtable1(c1、c2、c3)の値( ''、 ''、 '')に挿入され、値はギリシャ文字に設定されます。 – Supriya

関連する問題