文字コードに関する設定

MySQL を利用する上で文字コードの設定はクライアント側で使用する文字コードの設定とサーバ側でデータベースを作成した時のデフォルトの文字コードの設定を行う必要があります。ここでは MySQL の設定ファイルに対してサーバ側およびクライアント側で文字コードに関する設定を記述す方法について解説します。

(Last modified: )

設定ファイルを使った文字コードの設定方法

MySQL のサーバ側に関係する文字コードとクライアント側に関係する文字コードについては設定ファイルである my.ini ファイルで設定します。サーバ側については [mysql] グループで character-set-server に対して値を設定します。クライアント側については [mysql] グループで default-character-set に対して値を設定します。

[mysql]
default-character-set=文字コード

[mysqld]
character-set-server=文字コード

現在 my.ini ファイルではこの 2 つの設定項目について次のように記述されています。

[mysql]
#default-character-set=

[mysqld]
#character-set-server=

どちらの設定項目もコメントとなっており明示的に設定はされていません。

それではサーバ側とクライアント側の文字コードに設定方法についてそれぞれ詳しく見ていきます。

クライアント側に関する文字コード

クライアント側に関する文字コードの設定は、コマンドプロンプトなどクライアント側で使用している文字コードを設定しておきます。

MySQL サーバ側ではクライアントから送信されてきた SQL 文などをクライアント側で使用していると設定されている文字コードを使って変換します。正しい情報が設定されていれば、クライアント側とサーバ側で使用している文字コードが異なっていても問題ありません。

現在の設定を確認するには、コマンドプロンプトから MySQL コマンドラインツールを起動し次のようにコマンドを実行してください。

show variables like "chara%";

クライアント側に関する文字コード(1)

この中でクライアント側に関係する項目は次の 3 つです。

character_set_client
クライアントから MySQL サーバーに送信されるデータの文字コード

character_set_connection
サーバーがクライアントから受け取った文字列データを内部処理用の文字コードに変換する際に使用される文字コード

character_set_results
サーバーからクライアントに結果を送信する時に使用される文字コード

現在はすべて cp932 が設定されています。 cp932 というのは Shift_JIS を拡張した文字コードで Windows で使用されている文字コードです。

character_set_client     cp932
character_set_connection cp932
character_set_results    cp932

コマンドプロンプトで使用される文字コードではデフォルトで cp932 ですので、この設定のままで問題ありません。

文字コードを変更する場合

もし、コマンドプロンプトで使用する文字コードを UTF-8 などに変更した場合には my.ini ファイルの [mysql] グループで default-character-set に文字コードを設定します。

※ コマンドプロンプトで使用する文字コードを変更する手順は「文字コードの設定(CHCP)」を参照されてください。

[mysql]
default-character-set=utf8mb4

[mysqld]
# character-set-server=

クライアント側に関する文字コード(2)

設定ファイルを保存し、 MySQL サーバを再起動してください。その後で改めて MySQL コマンドラインツールを起動して文字コードに関する情報を取得してみます。

show variables like "chara%";

クライアント側に関する文字コード(3)

設定を変更したことにより、次の 3 つの値が変更されました。

character_set_client     utf8mb4
character_set_connection utf8mb4
character_set_results    utf8mb4

このようにクライアント側で使用する文字コードを変更するには、 my.ini ファイルの default-character-set に文字コードを設定してください。

サーバ側に関する文字コード

サーバ側に関する文字コードの設定は、データベースを作成した時に使用されるデフォルトの文字コードを設定することです。

現在の設定を確認するには、コマンドプロンプトから MySQL コマンドラインツールを起動し次のようにコマンドを実行してください。

show variables like "chara%";

サーバ側に関する文字コード(1)

この中でサーバ側に関係する項目は次の 2 つです。

character_set_database
現在選択されているデフォルトデータベースで使用される文字コード。USE コマンドでデータベースに接続するたびに、この設定はそのデータベースのデフォルト文字コードに変更される

character_set_server
新しいデータベースやテーブルを作成する際にデフォルトで使用される文字コード

現在はどちらも utf8mb4 が設定されています。

character_set_database   utf8mb4
character_set_server     utf8mb4

特に理由がなければデータベースのデフォルト文字コードは utf8mb4 で問題ありません。もし変更を行いたい場合には my.ini ファイルの [mysqld] グループで character-set-server に文字コードを設定します。

例として character-set-server に cp932 を設定してみます。

[mysql]
# default-character-set

[mysqld]
character-set-server=cp932

サーバ側に関する文字コード(2)

設定ファイルを保存し、 MySQL サーバを再起動してください。その後で改めて MySQL コマンドラインツールを起動して文字コードに関する情報を取得してみます。

show variables like "chara%";

サーバ側に関する文字コード(3)

設定を変更したことにより、次の 2 つの値が変更されました。

character_set_database   cp932
character_set_server     cp932

このようにサーバ側で使用する文字コードを変更するには、 my.ini ファイルの character-set-server に文字コードを設定してください。

今回使用する文字コードに関する設定

文字コードに関する設定は、デフォルトのままで問題はありませんが、明示的に文字コードに関する設定をするのであれば my.ini にて default-character-set は cp932 に設定し、 character-set-server は utf8mb4 に設定します。

[mysql]
default-character-set=cp932

[mysqld]
character-set-server=utf8mb4

MySQLで設定可能な文字コードの一覧

MySQL で設定可能な文字コードの一覧は、 MySQL コマンドラインツールから次のように実行することで取得できます。

show character set;

MySQLで設定可能な文字コードの一覧(1)

armscii8ARMSCII-8 Armenianarmscii8_general_ci1
asciiUS ASCIIascii_general_ci1
big5Big5 Traditional Chinesebig5_chinese_ci2
binaryBinary pseudo charsetbinary1
cp1250Windows Central Europeancp1250_general_ci1
cp1251Windows Cyrilliccp1251_general_ci1
cp1256Windows Arabiccp1256_general_ci1
cp1257Windows Balticcp1257_general_ci1
cp850DOS West Europeancp850_general_ci1
cp852DOS Central Europeancp852_general_ci1
cp866DOS Russiancp866_general_ci1
cp932SJIS for Windows Japanesecp932_japanese_ci2
dec8DEC West Europeandec8_swedish_ci1
eucjpmsUJIS for Windows Japaneseeucjpms_japanese_ci3
euckrEUC-KR Koreaneuckr_korean_ci2
gb18030China National Standard GB18030gb18030_chinese_ci4
gb2312GB2312 Simplified Chinesegb2312_chinese_ci2
gbkGBK Simplified Chinesegbk_chinese_ci2
geostd8GEOSTD8 Georgiangeostd8_general_ci1
greekISO 8859-7 Greekgreek_general_ci1
hebrewISO 8859-8 Hebrewhebrew_general_ci1
hp8HP West Europeanhp8_english_ci1
keybcs2DOS Kamenicky Czech-Slovakkeybcs2_general_ci1
koi8rKOI8-R Relcom Russiankoi8r_general_ci1
koi8uKOI8-U Ukrainiankoi8u_general_ci1
latin1cp1252 West Europeanlatin1_swedish_ci1
latin2ISO 8859-2 Central Europeanlatin2_general_ci1
latin5ISO 8859-9 Turkishlatin5_turkish_ci1
latin7ISO 8859-13 Balticlatin7_general_ci1
macceMac Central Europeanmacce_general_ci1
macromanMac West Europeanmacroman_general_ci1
sjisShift-JIS Japanesesjis_japanese_ci2
swe77bit Swedishswe7_swedish_ci1
tis620TIS620 Thaitis620_thai_ci1
ucs2UCS-2 Unicodeucs2_general_ci2
ujisEUC-JP Japaneseujis_japanese_ci3
utf16UTF-16 Unicodeutf16_general_ci4
utf16leUTF-16LE Unicodeutf16le_general_ci4
utf32UTF-32 Unicodeutf32_general_ci4
utf8UTF-8 Unicodeutf8_general_ci3
utf8mb4UTF-8 Unicodeutf8mb4_0900_ai_ci4

文字コードは Charset の列に記載されている値を指定して下さい。

utf8mb4とutf8mb3について

UTF-8 を文字コードとして使用する場合、以前は utf8(utf8mb3) と utf8mb4 のどちらも使用することができました。この 2 つの違いは utf8(utf8mb3) が 3 バイトなのに対して utf8mb4 は 4 バイトとなっています。 utf8 を指定した場合は最大 3 バイトで扱える文字だけが対象となり、ほとんどの文字は問題ありませんが一部の文字についてはサポートされません。 utf8mb4 を指定した場合はすべての文字がサポートの対象となります。

MySQL 8.4 では utf8mb3 は非推奨となっており、今後の MySQL のバージョンでは削除される可能性があります。 UTF-8 を使用する場合は utf8mb4 を使用するようにしてください。また utf8 は utf8mb3 のエイリアスになっていましたが、 utf8 の使用も非推奨となっています。

詳しくは公式サイトの「12.9.3 The utf8 Character Set (Deprecated alias for utf8mb3)」を参照されてください。

-- --

MySQL の設定ファイルに対してサーバ側およびクライアント側で文字コードに関する設定を記述す方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。