サポートされているアジアの文字セットには、中国語、日本語、韓国語、タイ語が含まれています。これらは複雑な場合があります。たとえば、中国語の文字セットは数千種類の文字に対応している必要があります。cp932
および sjis
文字セットの追加情報については、セクション10.1.14.7.1「cp932 文字セット」を参照してください。
MySQL でのアジアの文字セットのサポートに関連したよくある質問および問題に対する回答については、セクションA.11「MySQL 5.6 FAQ: MySQL の中国語、日本語、および韓国語の文字セット」を参照してください。
-
big5
(Big5 繁体字中国語) 照合順序:big5_bin
big5_chinese_ci
(デフォルト)
-
cp932
(SJIS for Windows 日本語) 照合順序:cp932_bin
cp932_japanese_ci
(デフォルト)
-
eucjpms
(UJIS for Windows 日本語) 照合順序:eucjpms_bin
eucjpms_japanese_ci
(デフォルト)
-
euckr
(EUC-KR 韓国語) 照合順序:euckr_bin
euckr_korean_ci
(デフォルト)
-
gb2312
(GB2312 簡体字中国語) 照合順序:gb2312_bin
gb2312_chinese_ci
(デフォルト)
-
gbk
(GBK 簡体字中国語) 照合順序:gbk_bin
gbk_chinese_ci
(デフォルト)
-
sjis
(Shift-JIS 日本語) 照合順序:sjis_bin
sjis_japanese_ci
(デフォルト)
-
tis620
(TIS620 タイ語) 照合順序:tis620_bin
tis620_thai_ci
(デフォルト)
-
ujis
(EUC-JP 日本語) 照合順序:ujis_bin
ujis_japanese_ci
(デフォルト)
big5_chinese_ci
照合順序は画数でソートします。
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 拡張文字のコードポイントを使用します。
http://www.microsoft.com/globaldev/reference/dbcs/932.htm に示す表には、
cp932
文字の Unicode 値に関する情報が記載されています。cp932
の表で下に 4 桁の数字が表示されている項目については、その数字は対応する Unicode (ucs2
) エンコーディングを表します。下線付きの 2 桁の値のある表項目では、これらの 2 桁の値で始まる一定範囲のcp932
文字があります。このような表項目をクリックすると、これらの桁の値で始まるcp932
文字対する各 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
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.3「サーバーコマンドオプション」を参照してください。