文字コードの設定

広告

MySQLを利用する上で文字コードの設定はサーバ側の文字コードとクライアント側の文字コードの両方について考慮する必要があります。

サーバ側とクライアント側の文字コードを一致させておけば、クライアントからデータベースに格納するためにデータを送信する場合も、データベースに問い合わせを行って結果をサーバ側からクライアント側へ返す場合も途中で変換などが行わずにサーバとクライアント側ではデータのやり取りが行われます。この場合は文字化けなどを心配する必要はありません。

サーバ側とクライアント側の文字コードが異なる場合、クライアントからサーバへデータを送信する時に、次のような変換が行われます。

クライアント側文字コード --> Unicode(ucs2) --> サーバ側文字コード

またサーバ側からクライアントへデータを返す場合も次のような変換が行われます。

サーバ側文字コード --> Unicode(ucs2) --> クライアント側文字コード

このような二段階の変換が行われるため、設定している文字コードによっては文字化けなどが生じる場合がありますので注意が必要です。

オプションファイルを使った文字コードの設定

MySQLサーバ側の設定はオプションファイルなどで「default-character-set」に対して文字コードを設定します。

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

クライアント側のM設定はオプションファイルなどで「default-character-set」に対して文字コードを設定します。

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

MySQLコマンドラインツールであれば[mysql]の後に指定しても結構です。

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

文字コードの確認

ではオプションファイルに設定した内容がどのように反映されるのかを確認してみます。現在のオプションファイルは次のように記述されています。(※下記はインストール直後の設定です。実際に使っている設定は「MySQLコマンドラインツールの文字コードの変更」を参照して下さい)。

# CLIENT SECTION
# ----------------------------------------------------------------------
[mysql]
default-character-set=utf8

# SERVER SECTION
# ----------------------------------------------------------------------
[mysqld]
default-character-set=utf8

MySQLコマンドラインツールでMySQLサーバへ接続し次のように入力して下さい。

show variables like 'char%';

p3-1

色々な値が表示されますが、特に関係があるのは次の値です。

character_set_client      utf8  クライアントが送信する文字コード
character_set_connection  utf8  文字コード情報が無い文字列の文字コード
character_set_results     utf8  クライアントへ送信する文字コード
character_set_server      utf8  サーバのデフォルト文字コード

ではサーバ側のdefault-character-setの値をcp932に変更します。

# CLIENT SECTION
# ----------------------------------------------------------------------
[mysql]
default-character-set=utf8

# SERVER SECTION
# ----------------------------------------------------------------------
[mysqld]
default-character-set=cp932

MySQLサーバを再起動して先ほどと同じように情報を取得してみます。

この場合、次のように表示されます。

p3-2

今度はクライアント側のdefault-character-setの値をcp932に変更します。

# CLIENT SECTION
# ----------------------------------------------------------------------
[mysql]
default-character-set=cp932

# SERVER SECTION
# ----------------------------------------------------------------------
[mysqld]
default-character-set=utf8

MySQLサーバを再起動して先ほどと同じように情報を取得してみます。

p3-3

最後にクライアント側のdefault-character-setの設定を消してみます。

# CLIENT SECTION
# ----------------------------------------------------------------------
[mysql]
#default-character-set=cp932

# SERVER SECTION
# ----------------------------------------------------------------------
[mysqld]
default-character-set=utf8

MySQLサーバを再起動して先ほどと同じように情報を取得してみます。

p3-4

default-character-setの設定を行わない場合、latin1となるようです。

サポートされている文字コード

MySQLでサポートされている文字コードは、MySQLコマンドラインツールでMySQLサーバへ接続し次のように入力して下さい。

show character set;

p3-5

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

( Written by Tatsuo Ikura )