【问题标题】:Store unicode first_name & last_name in Django user record在 Django 用户记录中存储 unicode first_name 和 last_name
【发布时间】:2012-07-25 06:36:42
【问题描述】:
尝试:
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
django-models
django-users
python-unicode
【解决方案1】:
Django 支持用户模型的 unicode 字符串,但您的数据库也必须支持它。如果你使用 sqlite 肯定没有问题,但是例如在 mySQL 中,默认的列编码不是 utf-8。
要解决此问题,您可以手动将 auth_user 表列 first_name 和 last_name 排序规则更改为 utf8_unicode_ci。或者,您可以在执行 syncdb(并首次创建表)之前将数据库排序规则设置为 utf8_unicode_ci,这样您的所有表和列都遵循相同的编码。
【解决方案2】:
阿米尔是正确的。
要更改现有表的 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
即使表非空也可以这样做。