在Django用户记录中存储unicode格式的名字和姓氏

4

尝试中:

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/ - dani herrera
2个回答

3
Django支持User模型的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

即使表格不为空,也可以完成这个操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接