トップ回答者
SQL Server文字コードについて

質問
回答
-
そのSQL Serverのテーブルの列はどのような型で定義されているのでしょうか? SQL Serverは文字を格納する際に、その文字はデフォルトのコードページに変換されます。例えばデフォルトのコードページがシフトJISであれば、シフトJISに変換されてから格納されます。よって、シフトJISに無い文字を挿入しようとした場合、必ず文字化けします。これはテーブルの列がどのような型で定義されているのかとは無関係です。たとえその列がUnicodeで定義されていたとしても、コードページによる変換後の文字が文字化けしているのですから、その文字化けした文字が入ってしまいます。よって、Unicodeで定義された列にUnicodeのまま文字列を入れるためには、Nプレフィックスを使います。別の言い方をすれば、Nプレフィックスを付けることにより、デフォルトのコードページであるシフトJISへの変換を避けることができ、UnicodeのままUnicode型の列に格納することが可能となります。
以上より、SQL Serverのテーブルの列がUnicode型でない場合、Unicodeにしかない文字を格納しようとすると文字化けします。また、SQL Serverのテーブルの列がUnicode型の場合でも、デフォルトのコードページがUnicodeでない場合、Unicodeにしかない文字を格納する場合、Nプレフィックスを付けないと文字化けします。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
すべての返信
-
そのSQL Serverのテーブルの列はどのような型で定義されているのでしょうか? SQL Serverは文字を格納する際に、その文字はデフォルトのコードページに変換されます。例えばデフォルトのコードページがシフトJISであれば、シフトJISに変換されてから格納されます。よって、シフトJISに無い文字を挿入しようとした場合、必ず文字化けします。これはテーブルの列がどのような型で定義されているのかとは無関係です。たとえその列がUnicodeで定義されていたとしても、コードページによる変換後の文字が文字化けしているのですから、その文字化けした文字が入ってしまいます。よって、Unicodeで定義された列にUnicodeのまま文字列を入れるためには、Nプレフィックスを使います。別の言い方をすれば、Nプレフィックスを付けることにより、デフォルトのコードページであるシフトJISへの変換を避けることができ、UnicodeのままUnicode型の列に格納することが可能となります。
以上より、SQL Serverのテーブルの列がUnicode型でない場合、Unicodeにしかない文字を格納しようとすると文字化けします。また、SQL Serverのテーブルの列がUnicode型の場合でも、デフォルトのコードページがUnicodeでない場合、Unicodeにしかない文字を格納する場合、Nプレフィックスを付けないと文字化けします。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
フォーラム オペレーターの星 睦美です。
佐祐理 さん、trapemiya さん 返信ありがとうございます。
ymoshimoshi さん、こんにちはtrapemiya さんからの情報を参考に、私のほうでも役立つ情報がないか探してみました。
以下のサポート情報をがありますので、この場をかりてご紹介させていただきますね。
・SQL Server で Unicode 文字列定数を処理するときは、すべての Unicode 文字列の前に N プレフィックスを付ける必要がある:
今後ともフォーラムをよろしくお願いします。日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美