[SQL]INF: SQL Server に UTF-8 のデータを格納する

文書翻訳 文書翻訳
文書番号: 232580 - 対象製品
この記事は、以前は次の ID で公開されていました: JP232580
すべて展開する | すべて折りたたむ

現象

アプリケーション (特に web ベースのもの) によっては、UTF-8 のエンコーディング形式によってエンコードされた Unicode データを扱わなければならない場合があります。SQL Server 7.0 は UCS-2 という異なる Unicode エンコーディングを使用しているため、UTF-8 を正しい文字セットとして認識しません。この資料では、この問題に対処するための方法を紹介します。

詳細

Unicode データはさまざまな形式を用いてエンコードされます。Unicode 文字を表すビットパターンを格納するための一般的な方法は、UCS-2 と UTF-8 の 2 つです。Windows NT と SQL Server、SQL Server ODBC ドライバは UCS-2 として Unicode データを内部表現しています。

アプリケーションが UTF-8 を用いてエンコードされた Unicode データを送受信し、そのアプリケーションのバックエンドとして SQL Server 7.0 を使用するには、以下を考慮する必要があります。

  1. アプリケーションが Active Server Pages (ASP) を使用し、Internet InformationServer (IIS) と Microsoft Windows 2000 を使用する場合には、サーバ側の ASP スクリプトに、"Session.Codepage=65001" を追加します。これは、動的に生成された文字列 (Response.Write) をクライアントに送信する前に IIS が UCS-2 から UTF-8 に変換するようにします。

    また、GET や POST でクライアントからサーバに送られた UTF-8 のデータも、UCS-2 に自動的に変換されます。web アプリケーション内で UTF-8 データを扱う方法としては、Session.Codepage プロパティが推奨されています。このコードページ設定は、IIS 4.0 と Windows NT 4.0 では使用できません。詳細については、MicrosoftKnowledge Base の以下の資料をご覧ください。

    254313 Error Message: Active Server Pages Error 'ASP 0203' Invalid Code
  2. アプリケーション内で適切に、UCS-2 と UTF-8 の変換を行わなければなりません。変換のサンプル コードは、Unicode Consortium のサイトにあります。

    ftp site ( ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/ )
    ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/

    UCS-2 を UTF-8 に変換するための高度なアルゴリズムについては、InternetRequest For Comments document RFC2279 に記述があります。
  3. UTF-8 エンコーディングの代わりに、UCS-2 を使用するようアプリケーションを修正します。
  4. 実際の UTF-8 のデータをサーバ側に格納するには、BINARY/VARBINARY/IMAGE カラムを使用してください。ただし、SQL Server 上で UTF-8 のデータを格納すると、正しい文字データとして、これらのデータをソートしたり範囲を検索したりするために、SQL Server を使用することができなくなります。UTF-8 のデータを保持するカラムに対する操作で、"ORDER BY" や より大きいを表す ">" 、より小さい "<" 比較、または、SUBSTRING() といったビルトインの SQL Server 文字操作機能を含んだものは、予期する結果を返さないでしょう。

    しかしながら、等値比較は動作します。SQL Server に UTF-8 データを格納する場合、CHAR/NCHAR/VARCHAR といった文字カラムを使用すべきではありません。UTF-8 は SQL Server において正しい文字データではありませんし、文字カラムに非文字データを格納することで、下記の Microsoft Knowledge Base 資料で述べられるような問題に遭遇する可能性があります。

    155723 INF: SQL Server Truncation of a DBCS String

    234748 PRB: SQL Server ODBC Driver Converts Language Events to Unicode


    Web ブラウザ以外 (たとえば、非 web ベースの ODBC アプリケーション) からこのデータにアクセスする場合にはいつでも、アプリケーション内で UTF-8 から UCS-2 への変換が必要となります。理由は、ODBC や Win32 API コール、共通の文字操作機能は、UTF-8 のデータでは動作しないからです。よって、別のアプリケーションで変換を行う必要があります。
  5. 複数言語を組み合わせてデータを格納することは単一のコードページでは解決できませんが、そのような要求を必要としていないのであれば、Unicode を使用する必要はないでしょう。


SQL Server 6.5 は Unicode データの格納をサポートしていません。SQL Server 6.5 を使用している場合の唯一のオプションは、ステップ 4 とステップ 5 になります。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 232580 (最終更新日 2000-05-31) をもとに作成したものです。


プロパティ

文書番号: 232580 - 最終更新日: 2004年5月7日 - リビジョン: 5.1
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
キーワード:?
international kbinfo ssrvprog ucs2 utf16 utf-16 utf8 KB232580
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com