現在オフラインです。再接続するためにインターネットの接続を待っています

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

この記事は、以前は次の 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) をもとに作成したものです。


UTF-16 UTF16 international UTF8 UCS2
プロパティ

文書番号:232580 - 最終更新日: 05/07/2004 15:32:05 - リビジョン: 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
フィードバック