試してみる:
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?)の場合、ユーザーのレコードにゴミが入ります。
私に何ができる?
試してみる:
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はユーザーモデルのUnicode文字列をサポートしていますが、データベースもそれをサポートしている必要があります。sqliteを使用している場合は問題はないはずですが、たとえばmySQLでは、デフォルトの列エンコーディングはutf-8ではありません。
この問題を解決するには、auth_userテーブルの列first_nameとlast_nameの照合を手動でに変更しますutf8_unicode_ci
。utf8_unicode_ci
または、syncdbを実行する前に(そして最初にテーブルを作成する前に)データベース照合をに設定することもできます。これにより、すべてのテーブルと列が同じエンコーディングに従います。
アミールは正しいです。
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
これは、テーブルが空でない場合でも実行できます。