2012-07-26 69 views
4

嘗試:存儲Unicode FIRST_NAME和姓氏在Django用戶記錄

new_user = User.objects.create_user(username, email, password) 
new_user.first_name = first_name 
new_user.last_name = last_name 
new_user.save() 

但如果第一個或最後一個名字是國外重音字母(Unicode的?)我得到用戶的記錄垃圾。

我能做些什麼?

+6

應該有效。檢查您的數據庫是否已準備好UTF8:https://docs.djangoproject.com/en/dev/ref/databases/ – danihp 2012-07-26 15:59:40

回答

3

Django支持用戶模型的unicode字符串,但您的數據庫也必須支持它。如果您使用的是sqlite,那麼一定不會有問題,但是例如在mySQL中,默認的列編碼不是utf-8。

要解決該問題,可以手動將auth_user表列first_name和last_name歸類更改爲utf8_unicode_ci。或者,您可以在執行syncdb之前將數據庫歸類設置爲utf8_unicode_ci(併爲第一次創建表),這樣所有的表和列都遵循相同的編碼。

1

埃米爾是正確的。

要改變MySQL的整理和現有的表,你可以這樣做:

> python manage.py dbshell 

mysql> 
mysql> ALTER TABLE auth_user 
    -> DEFAULT CHARACTER SET utf8mb4, 
    -> MODIFY first_name CHAR(30) 
    ->  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, 
    -> MODIFY last_name CHAR(30) 
    ->  CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL; 
Query OK, 10 rows affected (0.35 sec) 
Records: 10 Duplicates: 0 Warnings: 0 

這甚至如果表非空來完成。

相關問題