2007-10-29

[メモ]djangoのmodelのカスタムSQLでujisのトラブル回避

MySQLでujisを使っている場合、djangoのカスタムSQLで日本語を使おうとすると、以下のエラーがでる。

UnicodeEncodeError at /***/***/
'latin-1' codec can't encode characters in position 170-172: ordinal not in range(256)
Request Method: GET
Request URL: http://**.**.**.**/***/***/
Exception Type: UnicodeEncodeError
Exception Value: 'latin-1' codec can't encode characters in position 170-172: ordinal not in range(256)
Exception Location: /usr/local/python25/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-linux-x86_64.egg/MySQLdb/cursors.py in execute, line 149
Python Executable: /usr/local/python25/bin/python
Python Version: 2.5.0


ぐぐると自分が過去にTurboGearsMLに投稿した記事が出てきた。
http://groups.google.com/group/turbogears-ja/browse_thread/thread/69bc1ff4d86eca33/d18807e59a924bb3

ここではみなさんうまくきれいに解決されたようだが、相変わらず自分はうまくいかないので、以下をsettings.pyに書いて解決。
DATABASE_OPTIONS = dict(charset="ujis", read_default_file="/etc/my.cnf")

(ただし、/etc/my.cnfにデフォルトcharsetをujis指定で設定しておく。)

本当は↓みたいなのでうまくいけばいいんだけど、なんかそうならない。
DATABASE_OPTIONS = dict(charset="ujis", use_unicode=1)