MySQL

Windows版MySQL5.5のmy.ini設定

久しぶりに Windows 環境に MySQL を入れて使っていたら、文字コードのところで問題発生。

今回は純粋に MySQL の設定の問題でした。

文字コードの設定が変わっている

Windows の MySQL や PHP は、バイナリーで提供されているものを使うケースが多いので、Linux と違ってビルドを意識する機会が少ないと思います。

そこで、Windows の MySQL では my.ini の設定でカバーするのが定番です。

その中で、文字コードの指定は default-character-set だったハズなのですが、mysqld については character-set-server に変更になったので要注意です。

ついつい、default-character-set を使ってしまいがちですが、MySQL5.5 からは default-character-set が廃止されたので、これを指定した場合は起動時にエラーとなります。

my.iniの設定例

以下は my.ini の設定の参考例です。

MySQLとPHPでの文字化け(mysql_set_charset)

余談ですが、PHP と MySQL を使って構築された Web アプリで、最初に確認することの 1 つに文字コードの問題があります。

ここ数年はアプリもデータベースも UTF-8 の文字コードを使うことが一般的ですが、サーバ設定を見るとまだまだ文字コードは混在しています。
(時代は mb4 ですね)

例えば MySQL サーバ(mysqld)の場合は default-character-set で utf8 を設定していても、PHP の MySQL 接続クライアントは PHP ビルド時の文字コードによって挙動が変わるため、PHP のコネクション取得後に mysql_set_charset(“utf8”) や SET NAMES UTF8 などを実行しなければいけないケースが出てくる。

PHP5.2.3 以降なら mysql_set_charset でいいですが、違うバージョンでは 脆弱性が指摘されている SET NAMES UTF8 を使っているアプリもあれば、MySQL サーバ側で skip-character-set-client-handshake を使っているところもある。

これだけ混在してくると、他社サーバへの導入や、環境設定がある程度限定されたフレームワークによって文字化けするしないの問題はつきまとう。

全然まとまってないけど、とにかく本番サーバと全く同じ環境で事前に動作検証させてもらっておかないとドキドキすることになる。