このページは機械翻訳したものです。
cp932 が必要な理由
MySQL では sjis 文字セットは IANA で定義される Shift_JIS 文字セットに対応しており、これらは JIS X0201 および JIS X0208 文字セットをサポートしています。 (http://www.iana.org/assignments/character-setsを参照してください。)
ただし、記述用語としての「SHIFT JIS」の意味は非常にあいまいになっており、さまざまなベンダーが定義した Shift_JIS に対する拡張も含める場合もあります。
たとえば、日本語 Windows 環境で使用される「SHIFT JIS」は、Microsoft による Shift_JIS の拡張であり、正式な名称は Microsoft Windows Codepage : 932 または cp932 です。 Shift_JIS でサポートされる文字に加え、cp932 では、NEC 特殊文字、NEC 選定 IBM 拡張文字、IBM 選定文字などの拡張文字をサポートします。
多くの日本語ユーザーは、これらの拡張文字を使用するときに問題に直面してきました。 これらの問題は次の要因によって生じていました。
MySQL が自動的に文字セットの変換を行なっていること。
文字セットが Unicode (
ucs2) を使用して変換されていること。sjis文字セットが、これらの拡張文字の変換をサポートしていないこと。いわゆる「SHIFT JIS」から Unicode への変換には複数の変換ルールが存在し、文字によっては、変換ルールに従って別々に Unicode に変換される場合があること。 MySQL ではこれらの変換ルールのうち、1 つしかサポートしていません (詳細は後述します)。
MySQL の cp932 文字セットは、これらの問題を解決するように設計されています。
MySQL が文字セットの変換をサポートするので、異なる変換ルールを持つ IANA の Shift_JIS と cp932 を 2 つの異なる文字セットに区分することが重要になります。
cp932 と sjis との相違点
cp932 文字セットは次の点で sjis と異なります。
cp932は、NEC 特殊文字、NEC 選定 IBM 拡張文字、IBM 選定文字をサポートします。-
一部の
cp932文字には、2 つの異なるコードポイントがあり、両方とも同一の Unicode コードポイントに変換されます。 Unicode からcp932に戻すときに、どちらかのコードポイントを選択する必要があります。 この「ラウンドトリップ変換」については、Microsoft が推奨するルールが使用されます。 (http://support.microsoft.com/kb/170559/EN-US/を参照してください。)この変換ルールは次のように機能します。
文字が JIS X 0208 文字と NEC 特殊文字の両方に存在する場合には、JIS X 0208 のコードポイントを使用します。
文字が NEC 特殊文字と IBM 選定文字の両方に存在する場合には、NEC 特殊文字のコードポイントを使用します。
文字が IBM 選定文字と NEC 選定 IBM 拡張文字の両方に存在する場合は、IBM 拡張文字のコードポイントを使用します。
https://msdn.microsoft.com/en-us/goglobal/cc305152.aspx に示す表には、
cp932文字の Unicode 値に関する情報が記載されています。cp932の表で下に 4 桁の数字が表示されている項目については、その数字は対応する Unicode (ucs2) エンコーディングを表します。 下線付きの 2 桁の値のある表項目では、これらの 2 桁の値で始まる一定範囲のcp932文字があります。 このような表項目をクリックすると、これらの桁の値で始まるcp932文字対する各 Unicode 値を示したページが表示されます。詳細は次のリンクを参照してください。 それぞれ、次の文字セットのエンコーディングに対応します。
-
NEC 特殊文字 (先頭バイト
0x87):https://msdn.microsoft.com/en-us/goglobal/gg674964 -
NEC 選択 -IBM 拡張文字 (リードバイト
0xEDおよび0xEE):https://msdn.microsoft.com/en-us/goglobal/gg671837 https://msdn.microsoft.com/en-us/goglobal/gg671838 -
IBM が選択した文字 (リードバイト
0xFA,0xFB,0xFC):https://msdn.microsoft.com/en-us/goglobal/gg671839 https://msdn.microsoft.com/en-us/goglobal/gg671840 https://msdn.microsoft.com/en-us/goglobal/gg671841
cp932は、eucjpmsと組み合わせて使用することで、ユーザー定義の文字の変換をサポートし、sjis/ujisの変換での問題に対応します。 詳細は、http://www.sljfaq.org/afaq/encodings.htmlを参照してください。
一部の文字については、ucs2 との間の変換は、sjis と cp932 との場合と異なります。 次の表に、これらの違いを示します。
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) を使用すると大きな効果が得られることに注意してください。 セクション5.1.7「サーバーコマンドオプション」を参照してください。