mysqlとの接続の問題だと思って、settings.pyのDATABASEで’charset’: ‘utf8mb4’,を追加するも治らず。
### 試した事
views.py でユーザ作成時(User.objects.create_user)に以下の様にエンコードして呼び出すときにdecodeしようとした。
views.py
first_name = request.POST['first_name'].encode('unicode_escape') last_name = request.POST['last_name'].encode('unicode_escape')
### 問題点
– admin管理ツールからユーザの姓名を日本語で設定しようとすると、Incorrect string valueのエラーになるので、views.pyで.encode(‘unicode_escape’)としても根本的な解決にならない
– 更に、views.pyで以下の様にbyte型に変えてデコードしようとしたが、template側で日本語で表示できず、なんどやってもエンコードされた b’\\u592a\\u90ce’、b’\\u5c71\\u7530′ で表示される
data = User.objects.all() i = 0 for item in data: data[i].first_name = item.first_name.encode().decode('unicode-escape') data[i].last_name = item.last_name.encode().decode('unicode-escape') i += 1
かなり色々試したが、、、
### 解決策
mysql側
mysql> ALTER TABLE auth_user CONVERT TO CHARACTER SET utf8mb4;
これだけ。これで、admin管理ツールからユーザの姓名も日本語に変更できる様になった。
なんですと!!!