CentOS MySQL5.6 文字コード設定
2013.09.29
この記事は最終更新日から1年以上が経過しています。
前回、
VirtualBoxとVagrantで開発環境を構築 その2 PHP + MySQLインストール
などの記事で、VirtualBoxとVagrantで作った環境にMySQLをインストールしたのですが、
よく考えると文字コードの設定を行っていませんでした。
MySQLで日本語を使おうとすると文字化けが発生するかと思います。
MySQLサーバーを起ち上げ時の文字コードデフォルト設定が必要となりますので、設定していきましょう。
文字コード確認
mysql を起ち上げ、文字コードを確認すると、
mysql > show variables like "char%";
(またはstatusでも確認出来ます。)
このような感じや、もしくは全部 latin1になっていたりします。
このままだと日本語が入力出来ないので設定していきます。
文字コード設定のファイルは my.cnf となります。
MySQL5.6 my.cnf設定
my.cnf ファイルは /etc/以下である /etc/my.cnf にありますので設定していきます。
存在しない場合は、ファイルを作成しましょう。
sudo vi /etc/my.cnf
こちらのファイルに以下を追加。(又は作成)
[client] default-character-set=utf8 [mysqld] skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set=utf8 [mysql] default-character-set=utf8
skip-character-set-client-handshakeの指定は、MySQLが勝手に内部変換しないようにするためとなります。
注意点としましては、MySQL5.6(5.5〜)から
[mysqld] default-character-set=utf8
が、エラーとなってしまい、記述しているとMySQLサーバーが起ち上がらなくすらなってしまします。
なので、character-set-server = utf8 を記述します。
設定反映 MySQLサーバー再起動
上記のファイルの設定できましたらMySQLサーバーを再起動し、設定を反映させましょう。
従来だと、 mysql.server start 等のコマンドが使えるのですが、CentOSの起動コマンドは /etc/init.d/mysqlで行います。
MySQLサーバー停止
sudo /etc/init.d/mysql stop
MySQLサーバー起動
sudo /etc/init.d/mysql start
設定を確認
MySQLサーバーを再起動しましたら確認しましょう。
MySQLに接続、確認
mysql > show variables like "char%";
utf8に変更されているのが確認できます。
メデタシメデタシ。
設定前のDB、テーブルの文字コード変更
これで全て解決。
と思いきや、テーブルに日本語のデータを追加しようとすると、
のような感じでデータを挿入出来ません。
これは、設定前に作成したデータベース、テーブル、カラム等には文字コード変更が反映されていない(latin1のまま)ので、手動で変更する必要があります。
既存データベースの文字コード確認
mysql> use 【データベース名】
mysql> status;
Db characterset: 等がlatin1のままだったりします。
ここでlatin1のままだと文字化けしてしまいますので変更しましょう。
ALTER DATABASE 【データベース名】 DEFAULT CHARACTER SET 【文字コード】;
で変更できます。
utf8 変換例:
>mysql ALTER DATABASE dbname DEFAULT CHARACTER SET utf8;
既存テーブル、カラムの文字コード確認
続いてテーブルの文字コードの確認を行います。
SHOW CREATE TABLE 【テーブル名】;
上記のコマンドで確認が出来ます。
このような感じで latin1が含まれていましたら文字化けしてしまいます(データ挿入出来ません)。
以下のコマンドで変更します。
ALTER TABLE 【テーブル名】 CONVERT TO CHARACTER SET 【文字コード】;
utf8 変換例:
mysql> ALTER TABLE test CONVERT TO CHARACTER SET utf8;
これで文字コードの修正は完了です。必要であればMySQLを再起動して確認しましょう。