MySQL 5.1 リファレンスマニュアル :: 9 キャラクタセットサポート :: 9.10 MySQL でサポートされるキャラクタセットと照合順序 :: 9.10.7 アジアのキャラクタセット :: 9.10.7.1 cp932のキャラクタセット
« 9.10.7 アジアのキャラクタセット

10 データタイプ »
Section Navigation      [Toggle]
  • 9.10.7 アジアのキャラクタセット
  • 9.10.7.1 cp932のキャラクタセット

9.10.7.1. cp932のキャラクタセット

なぜcp932は必要なのでしょうか。

MySQLではsjis キャラクタセットはアイアナで定義されるShift_JISキャラクタセットに対応しており、これらはJIS X0201およびJIS X0208キャラクタセットをサポートしています。(詳しくはhttp://www.iana.org/assignments/character-setsをご確認ください。)

しかしながら、記述用語として一般的に使われている「SHIFT JIS」の意味は 非常にあいまいで、しばしば各ベンダーが独自にShift_JISを拡張したものまで含まれることがあります。

例えば、日本語Windows環境で使用される「シフトJIS」はMicrosoftによるShift_JISの拡張で、正式な名称はMicrosoft Windows Codepage :932もしくはcp932といいます。cp932ではShift_JISでサポートされる文字に加え、NEC特殊文字、NEC選定IBM拡張文字—、IBM拡張文字といった 各種拡張文字がサポートされています。

多くの日本語ユーザーがこれら拡張文字等の使用にあたって 問題に直面してきました。これらの問題は以下の要因によって生じていました:

  • MySQLが自動的にキャラクターセットの変換を行う。

  • キャラクターセットの変換はUnicode(ucs2)を介して行われる。

  • sjisキャラクターセットはこれら拡張文字の変換をサポートしていない。

  • いわゆる「シフトJIS」と呼ばれるキャラクターセットからUnicodeへの変換には 複数の変換ルールが存在し、いくつかの文字は変換ルールによって異なるUnicode文字に 変換される。MySQLではこれらの変換ルールのうち、一つだけしかサポートされていない (詳細は後述する)。

MySQLのcp932キャラクタセットはこれらの問題を解決するよう デザインされています。

MySQLがキャラクターセットの 変換をサポートするようになった為、異なる変換ルールを持つIANAの Shift_JISとcp932を二種類の キャラクターセットとして区別することが重要となります。

cp932 はsjisとどう異なるか

cp932キャラクタセットは以下の点でsjisと異なります。

  • cp932ではNEC特殊文字、NEC選定IBM拡張文字—、IBM拡張文字がサポートされる。 .

  • いくつかのcp932 文字については、二つの異なる コードポイントから同一のUnicodeコードポイントに変換される。よってこれらの文字をUnicodeからcp932に戻す際には 何れか一つのコードポイントが選択されなくてはならない。 この「ラウンドトリップ変換」については、Microsoftによって 推奨されるルールが使用されています。(詳しくはhttp://support.microsoft.com/kb/170559/EN-US/をご確認ください。)

    この変換ルールは以下のとおりです。

    • 当該文字がJIS X 0208文字とNEC特殊文字の両方に存在する場合には、 JIS X 0208のコードポイントを使用する。

    • 当該文字がNEC特殊文字とIBM拡張文字の両方に存在する場合には、 NEC特殊文字のコードポイントを使用します。

    • 当該文字がNEC選定—IBM拡張文字とIBM拡張文字の両方に存在する場合には、 IBM拡張文字のコードポイントを使用します。

    http://www.microsoft.com/globaldev/reference/dbcs/932.htmで表示されるテーブルはcp932文字のUnicodeポイントに関する情報です。cp932の表に記載されている文字のうち、 下に四桁の数字が表示されているものについては、その数字は対応するUnicode ucs2) コードポイントを表します。下線付きの二桁の値については これら二桁の値で始まる一連のcp932文字があることを表しています。 これらの値をクリックすることで、その二桁の値で始まる cp932文字、及びそのUnicodeコードポイントが表示されます。

    更に興味のある方は以下のリンクを参照してください。それぞれ、各文字の対応する Unicodeコードポイントを表示します。

    • NEC 特殊文字:

      http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm
      
    • NEC 選定— IBM 拡張文字:

      http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm
      http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm
      
    • IBM 選定文字:

      http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm
      http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm
      http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm
      
  • eucjpmsキャラクターセットと組み合わせて 使用することで、 cp932 でユーザー定義文字の変換がサポートされ、 sjis/ujis間での変換問題にも対応しています。詳細は次をhttp://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html参照してください。

いくつかの文字については、sjisとcp932.でucs2との変換ルールが異なります。以下のテーブルはこれらの違いを例示したものです。

ucs2への変換:

sjis/cp932 値 sjis -> ucs2 変換 cp932 -> ucs2 変換
5C 005C 005C
7E 007E 007E
815C 2015 2015
815F 005C FF3C
8160 301C FF5E
8161 2016 2225
817C 2212 FF0D
8191 00A2 FFE0
8192 00A3 FFE1
81CA 00AC FFE2

ucs2からの変換:

ucs2 値 ucs2 -> sjis 変換 ucs2 -> cp932 変換
005C 815F 5C
007E 7E 7E
00A2 8191 3F
00A3 8192 3F
00AC 81CA 3F
2015 815C 815C
2016 8161 3F
2212 817C 3F
2225 3F 8161
301C 8160 3F
FF0D 3F 817C
FF3C 3F 815F
FF5E 3F 8160
FFE0 3F 8191
FFE1 3F 8192
FFE2 3F 81CA

日本語キャラクタセットのユーザーは--character-set-client-handshake(もしくは --skip-character-set-client-handshake)を使うことで重要な効果があることに注意しなければなりません。詳しくは項4.2.2. 「コマンド オプション」を参照してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates