WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

MySQLの文字化けを解消する

      2012/12/11

MySQLの文字コードの設定を調べる

下記コマンドで現在のMySQLの文字コードの設定を調べます。

[root@centos ~] mysql -u root -p    ※MySQLにログイン
Enter password:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                     | 
| character_set_connection | latin1                     | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | latin1                     | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

上記のようにlatin1が表示された場合は文字化けが起こってしまいます。

設定ファイルの編集

設定ファイルに以下のように追記します。
ここでは文字コードをUTF-8に設定します。
設定ファイルのパスは/etc/my.cnf(apt-getでインストールした場合は/etc/mysql/my.cnf)です。

[root@centos ~] vi /etc/my.cnf    ※MySQLにログイン
[mysqld]
〜略〜
以下を追加

default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

[client] 
default-character-set = utf8 

[mysqldump] 
default-character-set = utf8 

[mysql] 
default-character-set = utf8 

skip-character-set-client-handshakeの指定は、MySQLが勝手に内部変換しないようにするためです。

編集が完了したらMySQLを再起動して設定を反映します。

[root@centos ~] /etc/init.d/mysql restart    ※MySQLを再起動
[root@centos ~] mysql -u root -p    ※MySQLにログイン
Enter password:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

ちなみに上記設定は新しく作られるデータベースから反映されるため、既存のデータベースには反映されません。

 - MySQL , , , , ,