(旧) kano-e no memo

こっちは更新してません

DjangoとMySQLの間でutf8でやりとりしてくれない?

追記。
以下の状況は、MySQL側の設定に見落としがあったようで、Djangoの問題ではありませんでした。

状況

  • database, tableともにDEFAULT CHARSET=utf8

な時に、

  1. djangoで新しくmodelを作成
  2. mysqlで直接日本語文字列をINSERT
  3. もちろん、mysqlで直接SELECTすると問題なく表示
  4. django経由すると文字化けてる

という状況になって、困っていたので、色々実験。

  1. django側(/admin/など)から日本語の文字列を登録
  2. django上では問題なく表示
  3. mysql直接覗くと文字列がなぜかutf8じゃない(文字化けてる)

あるいは、

  1. 以前から使っていたテーブル(もちろんutf8)に合わせてdjangoのmodelを作成
  2. django経由すると文字化けてる

と、いうような状況でした。
Google グループのあたりが関係しているのかなーと思って、setting.pyにDATABASE_OPTIONS = dict(charset="utf8")やDATABASE_OPTIONS = dict(init_command="SET NAMES 'utf8'")を設定したりしてみたんですが、うまくいかず。
django内だけで完結している間は、大丈夫なんですが……気持ち悪い状況なので、もうちょっと本気で考えたいところです。
とりあえず、今日は状況のメモだけ。