即戦力になるためのPHPシステム開発の教科書で気がついたMySQLの日本語設定について
目次
現在、Webアプリケーションフレームワークについて、即戦力になるための PHPシステム開発の教科書を写経しながら学習しております。
そのときに気付いたことのメモ書きです。本に書いているとおりでは、日本語の表記ができなかったので、MySQLの設定を独自に変えてみたというお話です。
元々のmy.cnf(設定ファイル)の内容
本の内容では、データベースで日本語を扱えるようにするため、my.cnfに3か所の追記をするように書かれています(P23)
[mysqld]
character-set-server = utf8
[mysql]
default-character-set = utf8
[mysqldump]
default-character-set = utf8
これらを追記すると、my.cnfは次のような感じになります。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql character-set-server = utf8 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysql] default-character-set = utf8 [mysqldump] default-character-set = utf8
しかし、これだと画面を表示すると、英数字は正しく表示されますが、日本語はすべて「???」で表示されることになります。
データベース内部の文字は、日本語で正しく表記されていたため、データベースからCakePHPにデータを渡すときの、文字コードの設定がされていなかったと推測されます。
日本語を正しく表記させるためのmy.cnf
では、データベース内部の文字を、CakePHPで正しく反映させるためには、どうすれば良でしょうか?最初で追記した内容に加えて、さらに2つのセクションで、次の追記が必要です。
[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
my.cnfの内容は次のようになります。
[client] default-character-set=utf8 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql character-set-server = utf8 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysql] default-character-set = utf8
このようにすると、下の画像のように、日本語も正しく表示されます。