このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

web帳

記事詳細

2013.09.29

CentOS MySQL5.6 文字コード設定

前回、

VirtualBoxとVagrantで開発環境を構築 その2 PHP + MySQLインストール

などの記事で、VirtualBoxとVagrantで作った環境にMySQLをインストールしたのですが、

よく考えると文字コードの設定を行っていませんでした。

MySQLで日本語を使おうとすると文字化けが発生するかと思います。

MySQLサーバーを起ち上げ時の文字コードデフォルト設定が必要となりますので、設定していきましょう。

文字コード確認

mysql を起ち上げ、文字コードを確認すると、

[code]mysql > show variables like "char%";[/code]

(またはstatusでも確認出来ます。)

このような感じや、もしくは全部 latin1になっていたりします。

このままだと日本語が入力出来ないので設定していきます。

文字コード設定のファイルは my.cnf となります。

MySQL5.6 my.cnf設定

my.cnf ファイルは /etc/以下である /etc/my.cnf にありますので設定していきます。

存在しない場合は、ファイルを作成しましょう。

[code]sudo vi /etc/my.cnf[/code]

こちらのファイルに以下を追加。(又は作成)

[code]
[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 [/code]

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

注意点としましては、MySQL5.6(5.5〜)から

[code][mysqld]
default-character-set=utf8
[/code]

が、エラーとなってしまい、記述しているとMySQLサーバーが起ち上がらなくすらなってしまします。

なので、character-set-server = utf8 を記述します。

設定反映 MySQLサーバー再起動

上記のファイルの設定できましたらMySQLサーバーを再起動し、設定を反映させましょう。

従来だと、 mysql.server start 等のコマンドが使えるのですが、CentOSの起動コマンドは /etc/init.d/mysqlで行います。

MySQLサーバー停止

[code]sudo /etc/init.d/mysql stop [/code]

MySQLサーバー起動

[code]sudo /etc/init.d/mysql start [/code]

設定を確認

MySQLサーバーを再起動しましたら確認しましょう。

MySQLに接続、確認

[code]mysql > show variables like "char%";[/code]

 

utf8に変更されているのが確認できます。

メデタシメデタシ。

設定前のDB、テーブルの文字コード変更

これで全て解決。

と思いきや、テーブルに日本語のデータを追加しようとすると、

のような感じでデータを挿入出来ません。

これは、設定前に作成したデータベース、テーブル、カラム等には文字コード変更が反映されていない(latin1のまま)ので、手動で変更する必要があります。

既存データベースの文字コード確認

[code]mysql> use 【データベース名】[/code]
[code]mysql> status;[/code]

Db characterset: 等がlatin1のままだったりします。

ここでlatin1のままだと文字化けしてしまいますので変更しましょう。

[code]ALTER DATABASE 【データベース名】 DEFAULT CHARACTER SET 【文字コード】;[/code]

で変更できます。

utf8 変換例:

[code]>mysql ALTER DATABASE dbname DEFAULT CHARACTER SET utf8;[/code]

 

既存テーブル、カラムの文字コード確認

続いてテーブルの文字コードの確認を行います。

[code]SHOW CREATE TABLE 【テーブル名】;[/code]

上記のコマンドで確認が出来ます。

このような感じで latin1が含まれていましたら文字化けしてしまいます(データ挿入出来ません)。

以下のコマンドで変更します。

[code]ALTER TABLE 【テーブル名】 CONVERT TO CHARACTER SET 【文字コード】;[/code]

utf8 変換例:

[code]mysql> ALTER TABLE test CONVERT TO CHARACTER SET utf8;[/code]

これで文字コードの修正は完了です。必要であればMySQLを再起動して確認しましょう。

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、港区六本木で活動中。

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。