none
SQL Server文字コードについて RRS feed

  • 質問

  • SQL Server 初心者です。教えてください。

    SQL Server 2000 sp3aの環境ですが、

    格納すると文字化けする文字、文字コードがあれば教えていただけないでしょうか。

    情報を掲載しているURLがあれば教えてください。

    ちなみに使用しているシステムの入力のブラウザ上でエンコードから確認すると

    シフトJISになっています。

    ソースの表示では、charset=x-sjisになっています。


    2013年6月13日 8:38

回答

  • その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 2013年6月13日 13:55
    • 回答の候補に設定 星 睦美 2013年6月18日 1:03
    • 回答としてマーク 星 睦美 2013年6月26日 7:06
    2013年6月13日 13:54

すべての返信

  • SQL Serverとブラウザーの間にはどのようなサーバー / プログラムが介在しているのでしょうか?

    特に、SQL Serverと直接やり取りしているプログラムが重要です。

    • 回答の候補に設定 星 睦美 2013年6月18日 1:02
    2013年6月13日 11:42
  • その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 2013年6月13日 13:55
    • 回答の候補に設定 星 睦美 2013年6月18日 1:03
    • 回答としてマーク 星 睦美 2013年6月26日 7:06
    2013年6月13日 13:54
  • フォーラム オペレーターの星 睦美です。
    佐祐理 さん、trapemiya さん 返信ありがとうございます。
    ymoshimoshi さん、こんにちは

    trapemiya さんからの情報を参考に、私のほうでも役立つ情報がないか探してみました。

    以下のサポート情報をがありますので、この場をかりてご紹介させていただきますね。

    SQL Server で Unicode 文字列定数を処理するときは、すべての Unicode 文字列の前に N プレフィックスを付ける必要がある:

    今後ともフォーラムをよろしくお願いします。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年6月26日 7:12