2009年5月4日 星期一

Django+MySQL在admin下發生錯誤訊息

上週在練習django搭配mysql時,在建立user時發生了下面這個問題:(註0)

這兩天在研究admin模塊,製作一個數據管理系統,發現輸入中文時雖然數據可以正常輸入sql數據庫,但是在save時會報錯。查文檔,搜索都沒有找到問題所在,查看數據庫時終於發現了原因,下面給出解決方法。

錯誤類似於"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'message' at row 1

"

這個錯誤的解決方法是設置數據庫"auth_message"表的message一項使用utf8_unicode_ci

對於錯誤"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'object_repr' at row 1

"

解決方法是設置django_admin_log表的object_repr一項使用utf8_unicode_ci

我看不懂它的解決方法"使用utf8_unicode_ci"…應該說不知道怎麼去單獨設置那些欄位的設定… 0rz。

我的方法是,上google查了一下,將mysql的my.ini (註1)設定修改如下:

修改 MySQL Server 的系統設定檔

修改 /etc/my.cnf (註1):
引用:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8

最後把資料庫drop掉(我取名為django),重新建立create database django ,在mysql console下use django,輸入status,確定資料庫的設定(Db characterset)都為utf8,這樣上面的問題就解決了。

2009-05-04_102723

結論是,在剛開始建立資料庫時,就要把編碼手動給utf8了,不然會照mysql的預設值(latin)。

註0: 搭配python 2.5附的sqlite3就沒這問題。

註1: 我的mysql server是裝在windows上,所以修改的是my.ini。

2 則留言:

  1. 或者可以在 create database 時加入 default character set utf8 的語句
    像這樣︰

    CREATE DATABASE DJANGO_SOME_PROJECT DEFAULT CHARACTER SET UTF8;

    回覆刪除
  2. 謝謝前一位的指教,又學到了一招。 :)

    回覆刪除