上週在練習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,這樣上面的問題就解決了。
結論是,在剛開始建立資料庫時,就要把編碼手動給utf8了,不然會照mysql的預設值(latin)。
註0: 搭配python 2.5附的sqlite3就沒這問題。
註1: 我的mysql server是裝在windows上,所以修改的是my.ini。
或者可以在 create database 時加入 default character set utf8 的語句
回覆刪除像這樣︰
CREATE DATABASE DJANGO_SOME_PROJECT DEFAULT CHARACTER SET UTF8;
謝謝前一位的指教,又學到了一招。 :)
回覆刪除