Rumah > pangkalan data > tutorial mysql > Mengapa Django Melemparkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod ke SQLite?

Mengapa Django Melemparkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod ke SQLite?

Mary-Kate Olsen
Lepaskan: 2024-11-28 16:26:14
asal
975 orang telah melayarinya

Why Does Django Throw

Ralat Django SQLite: "Nilai Rentetan Salah" Semasa Menyimpan Rentetan Unikod

Menghadapi ralat "Nilai Rentetan Tidak Tepat" semasa menyimpan rentetan Unikod dalam Model auth_user Django boleh mengecewakan. Ralat ini biasanya menunjukkan isu dengan pengekodan aksara atau panjang bait maksimum yang dibenarkan untuk rentetan.

Punca:

Punca ralat ini ialah MySQL mempunyai had 3-bait pada aksara Unicode menggunakan set aksara utf-8. Ini bermakna aksara yang memerlukan lebih daripada 3 bait, seperti yang mempunyai diakritik atau simbol khas, tidak boleh disimpan dalam jadual MySQL menggunakan set aksara utf-8.

Penyelesaian:

Untuk menyelesaikan isu ini, anda perlu melakukan perkara berikut langkah:

  1. Migrate ke MySQL 5.5 atau Kemudian: Set aksara utf8mb4, yang membenarkan aksara Unicode 4-bait, hanya tersedia dalam MySQL 5.5 dan versi yang lebih baru. Tingkatkan pelayan MySQL anda jika perlu.
  2. Tukar Pangkalan Data, Jadual dan Set Aksara Lajur: Ubah suai pangkalan data MySQL anda, jadual dan lajur untuk menggunakan set aksara utf8mb4.
  3. Konfigurasikan Django: Tentukan pilihan charset dalam fail tetapan Django anda sebagai berikut:
DATABASES = {
    'default': {
        # ... other settings ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}
Salin selepas log masuk
  1. Replika Medan: Jika anda mempunyai CharFields dengan panjang maksimum 255 dan indeks padanya, kurangkan panjang_maks sebanyak 33%, sebagai utf8mb4 memerlukan lebih banyak ruang storan daripada utf-8.

Varian PostgreSQL:

Jika anda menggunakan PostgreSQL sebagai backend pangkalan data anda, anda mungkin tidak menghadapi masalah ini, kerana PostgreSQL menyokong aksara Unicode dengan panjang maksimum 4 bait.

Kesimpulan:

Dengan menaik taraf kepada MySQL 5.5 atau lebih baru dan menggunakan set aksara utf8mb4, anda boleh menyelesaikan ralat "Nilai Rentetan Salah" semasa menyimpan rentetan Unicode dalam Django. Ingat untuk mengubah suai tetapan Django anda dan laraskan skema pangkalan data dan panjang medan anda seperti yang diperlukan.

Atas ialah kandungan terperinci Mengapa Django Melemparkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod ke SQLite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan