文字コードに関する設定
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%";
この中でクライアント側に関係する項目は次の 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=
設定ファイルを保存し、 MySQL サーバを再起動してください。その後で改めて MySQL コマンドラインツールを起動して文字コードに関する情報を取得してみます。
show variables like "chara%";
設定を変更したことにより、次の 3 つの値が変更されました。
character_set_client utf8mb4 character_set_connection utf8mb4 character_set_results utf8mb4
このようにクライアント側で使用する文字コードを変更するには、 my.ini ファイルの default-character-set に文字コードを設定してください。
サーバ側に関する文字コード
サーバ側に関する文字コードの設定は、データベースを作成した時に使用されるデフォルトの文字コードを設定することです。
現在の設定を確認するには、コマンドプロンプトから MySQL コマンドラインツールを起動し次のようにコマンドを実行してください。
show variables like "chara%";
この中でサーバ側に関係する項目は次の 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
設定ファイルを保存し、 MySQL サーバを再起動してください。その後で改めて MySQL コマンドラインツールを起動して文字コードに関する情報を取得してみます。
show variables like "chara%";
設定を変更したことにより、次の 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;
armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
ascii | US ASCII | ascii_general_ci | 1 |
big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
binary | Binary pseudo charset | binary | 1 |
cp1250 | Windows Central European | cp1250_general_ci | 1 |
cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
cp1256 | Windows Arabic | cp1256_general_ci | 1 |
cp1257 | Windows Baltic | cp1257_general_ci | 1 |
cp850 | DOS West European | cp850_general_ci | 1 |
cp852 | DOS Central European | cp852_general_ci | 1 |
cp866 | DOS Russian | cp866_general_ci | 1 |
cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
dec8 | DEC West European | dec8_swedish_ci | 1 |
eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
euckr | EUC-KR Korean | euckr_korean_ci | 2 |
gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
greek | ISO 8859-7 Greek | greek_general_ci | 1 |
hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
hp8 | HP West European | hp8_english_ci | 1 |
keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
latin1 | cp1252 West European | latin1_swedish_ci | 1 |
latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
macce | Mac Central European | macce_general_ci | 1 |
macroman | Mac West European | macroman_general_ci | 1 |
sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
tis620 | TIS620 Thai | tis620_thai_ci | 1 |
ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
文字コードは 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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。