今後はこの方向で行こう。
(ノ・・)ン。。。。。。(((●コロコロッ
init-connectがポイント。
[mysqld]
default-character-set = utf8
init-connect = "SET NAMES 'utf8'"
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
_〆(。。)コウイウホウホウモアルノカ…
[More:]
MySQL4.1以降、MySQLの文字化け問題はめっきり無くなった。
それもこれもSET NAMES Statementのおかげ。
しかし、フレームワークやPDOを使うとどうしても困る場面がある。
それは
SET NAMESの問い合わせタイミング
接続が確立した段階で一番最初に
SET NAMES 'utf8'
と打ちたいわけだが、
フレームワークなどを利用していると、
ORMなどを経由してデータを取ってくる時に、
SET NAMESを打つスキがない時がある。
それだけのために継承したコントローラなどを用意するのはちょっとバカバカしい。
PDOに至ってはDSNにcharsetというパラメータが存在するくせに、
全然使ってくれない。
(PEAR DBのcharsetパラメータはちゃんと動く)
( ̄-  ̄ ) ウーン
アプローチをかえてMySQL側から探してみると、
良いオプションがあった。
それが
init-connect
init-connectとは?
接続が確立した段階で実行されるstatementを登録するオプション
これでアプリケーションが接続を試みて成功した段階で、
[SET NAMES 'utf8']が実行される。
Webアプリケーション側から発行するわけではないので、
クエリ発行一回分のオーバーヘッドも軽減できる。
(まぁたいしたことはないが。)
今後文字コードの対策はこの方法で対策を取ることにしよう。
レンタルサーバとかではちょっと難しいかもしれないが。