symfonyを使って文字コードUTF-8でDB操作をする方法
何時間さまよったことやら、答えは1行でした。。。(笑;)
symfonyと言うPHP言語で作られたRuby on Railsライクなフレームワークをつついているのだが、文字コードをUTF-8にしてデータベースにデータを挿入したり更新するのに何時間も手こずってしまいました。
「symfony 文字コード UTF-8 MySQL」みたいな組み合わせで色々ググってもなかなか解決案が出てこない。なんで???
mixi名マジヘンに「MySQLの文字コードの設定を全部UTF-8にしたらいいですよ」と言われたのだが、この方法は採用しかねる。
理由は同じ環境内に異なる文字コードのシステムがあるため、symfonyだけのためにDBサーバー全てのコードを変えるわけにはいかないから。ちなみにcharacter_set_server以外を全部UTF-8にはしてみたがダメだった。
my.cnfを編集する、と言う方法もあるがこれも却下。理由は弊社の場合、納品先がレンタルサーバーの可能性が高いため、my.cnfは編集できないのを前提に対策を考える必要があるため。
色々往生した結果、面白いことに本家サイトにて、ある開発者がある日本人のサイトを参考にした解決案、と言う記事があり、
http://www.symfony-project.com/snippets/snippet/37
自分もその日本人のサイトは既に知っていたのだが、コード内容がちょっと古いようだったので他を探していたところで、その記事のコメントにsymfonyを開発したFabienさんご本人があっさり一言、「それ、databases.ymlに1行追加で出来るぜ」だって(笑)。
ならもっとググられるようなところに記述してくれよー。てか、このコメントにその1行書けよー(笑)。結局更なるググりんこ(笑)。
とまぁたった1行のために苦労しましたが、下記が答えです。あ、Propelを使うことが前提ですよー。
プロジェクト名/config/databases.yml
にて、下記のように「encoding: utf8」と言う記述を追加。
all:
propel:
class: sfPropelDatabase
param:
phptype: mysql
host: localhost
database: プロジェクト名
username: ユーザー名
password: パスワード
encoding: utf8
広ブロっち♪ d(^-^)