嘗試:存儲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的?)我得到用戶的記錄垃圾。
我能做些什麼?
嘗試:存儲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的?)我得到用戶的記錄垃圾。
我能做些什麼?
Django支持用戶模型的unicode字符串,但您的數據庫也必須支持它。如果您使用的是sqlite,那麼一定不會有問題,但是例如在mySQL中,默認的列編碼不是utf-8。
要解決該問題,可以手動將auth_user表列first_name和last_name歸類更改爲utf8_unicode_ci
。或者,您可以在執行syncdb之前將數據庫歸類設置爲utf8_unicode_ci
(併爲第一次創建表),這樣所有的表和列都遵循相同的編碼。
埃米爾是正確的。
要改變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
這甚至如果表非空來完成。
應該有效。檢查您的數據庫是否已準備好UTF8:https://docs.djangoproject.com/en/dev/ref/databases/ – danihp 2012-07-26 15:59:40