Tak satu pun dari jawaban ini memecahkan masalah bagi saya. Akar penyebabnya adalah:
Anda tidak dapat menyimpan karakter 4-byte di MySQL dengan set karakter utf-8.
MySQL memiliki batas 3 byte pada karakter utf-8 (ya, ini aneh, diringkas dengan baik oleh pengembang Django di sini )
Untuk mengatasi ini, Anda perlu:
- Ubah database, tabel, dan kolom MySQL Anda untuk menggunakan kumpulan karakter utf8mb4 (hanya tersedia dari MySQL 5.5 dan seterusnya)
- Tentukan rangkaian karakter dalam file pengaturan Django Anda seperti di bawah ini:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Catatan:Saat membuat ulang basis data, Anda mungkin mengalami 'Kunci yang ditentukan terlalu panjang ' isu.
Penyebab yang paling mungkin adalah CharField
yang memiliki max_length 255 dan semacam indeks di atasnya (mis. Karena utf8mb4 menggunakan 33% lebih banyak ruang daripada utf-8, Anda harus membuat bidang ini 33% lebih kecil.
Dalam hal ini, ubah max_length dari 255 menjadi 191.
Atau Anda dapat mengedit konfigurasi MySQL Anda untuk menghapus batasan ini tetapi bukan tanpa peretasan Django
PERBARUI: Saya baru saja mengalami masalah ini lagi dan akhirnya beralih ke PostgreSQL
karena saya tidak dapat mengurangi VARCHAR
saya hingga 191 karakter.