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:たぶん文字の順序等のルール?