【问题标题】: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
    

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

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多