これらの答えはどれも私にとって問題を解決しませんでした。根本的な原因は次のとおりです:
utf-8文字セットを使用してMySQLに4バイト文字を格納することはできません。
MySQLには、utf-8文字に3バイトの制限があります。 (はい、それは奇抜です、ここでDjango開発者によってうまくまとめられています )
これを解決するには、次のことを行う必要があります。
- MySQLデータベース、テーブル、および列を変更して、utf8mb4文字セット (MySQL 5.5以降でのみ利用可能)
- Django設定ファイルで次のように文字セットを指定します。
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
注:データベースを再作成するときに、「
最も可能性の高い原因はCharField
です max_lengthが255で、何らかのインデックスがあります(例:unique)。 utf8mb4はutf-8より33%多いスペースを使用するため、これらのフィールドを33%小さくする必要があります。
この場合、max_lengthを255から191に変更します。
または、 MySQL構成を編集して、この制限を削除することもできます ただし、djangoハッカーなしではありません
更新: この問題が再び発生し、PostgreSQLに切り替える
ことになりました。 VARCHAR
を減らすことができなかったため 191文字まで。