MySQL と PHP の文字エンコーディング

  • 「skip-character-set-client-handshake」で検索すれば情報多数*1
  • ↑のオプションがうまく働くのは,下記のエンコーディングが一致する時
  • 統一されていない場合はコネクションを張るごとに「SET NAMES エンコーディング名;」クエリを投げれば,サーバとクライアントのやりとりの部分で文字化けたりはしない
    • できればデータベースのエンコーディングもそのコードにかえたほうがいいかも
    • でもその場合に変換工程が省かれるかどうかは未検証
  • ちなみに文字照合*3についても設定があるが,「SET NAMES」で文字セットを指定すると適したものに自動的に変わる
    • 「SET NAMES」に「COLLATE 照合セット」オプションを付加することも可能

今時の PHP アプリで国際化されているものはたいてい UTF-8 なのでそれに統一していたんですが,EUC-JP アプリを動かす必要が出てきて,例のサーバ設定だけじゃ回避できなかったので「SET NAMES 舐めるなイケてる」とメモ書き。

未検証部分をいつか調べたいです。

*1:たとえば「http://puchiko.lowtech.ne.jp/?itemid=349&catid=27」とかよくまとまってます

*2:実際にはデータベースのエンコーディングが異なっていても変換してくれるはずですが,変換しないほうがトラブルは少ないので一応

*3:たぶん文字の順序等のルール?