存储unicode first_name& Django用户记录中的last_name

时间:2012-07-26 15:56:47

标签: django django-models django-users python-unicode

尝试:

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?),我会在用户的记录中得到垃圾。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

Django支持User模型的unicode字符串,但您的数据库也必须支持它。如果您正在使用sqlite,那一定不会有问题,但是例如在mySQL中,默认列编码不是utf-8。

要解决此问题,您可以手动将auth_user表列first_name和last_name归类更改为utf8_unicode_ci。或者,您可以在执行syncdb(并且第一次创建表)之前将数据库排序规则设置为utf8_unicode_ci,这样所有表和列都遵循相同的编码。

答案 1 :(得分:1)

Amir是对的。

要更改现有表的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

即使表格非空,也可以这样做。