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?)の場合、ユーザーのレコードにゴミが入ります。

私に何ができる?

4

2 に答える 2

3

DjangoはユーザーモデルのUnicode文字列をサポートしていますが、データベースもそれをサポートしている必要があります。sqliteを使用している場合は問題はないはずですが、たとえばmySQLでは、デフォルトの列エンコーディングはutf-8ではありません。

この問題を解決するには、auth_userテーブルの列first_nameとlast_nameの照合を手動でに変更しますutf8_unicode_ciutf8_unicode_ciまたは、syncdbを実行する前に(そして最初にテーブルを作成する前に)データベース照合をに設定することもできます。これにより、すべてのテーブルと列が同じエンコーディングに従います。

于 2012-07-27T12:04:55.267 に答える
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

これは、テーブルが空でない場合でも実行できます。

于 2013-09-22T12:55:59.017 に答える