Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod dalam MySQL dengan Django?

Bagaimana untuk Membetulkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod dalam MySQL dengan Django?

DDD
DDDasal
2024-12-15 10:54:12674semak imbas

How to Fix

Ralat Nilai Rentetan Tidak Betul semasa Menyimpan Rentetan Unikod dalam MySQL

Apabila cuba menyimpan rentetan unikod ke model auth_user Django, "nilai rentetan tidak betul "kesilapan mungkin berlaku. Ini kerana MySQL mempunyai had 3-bait pada aksara utf-8, manakala sesetengah aksara unikod memerlukan 4 bait.

Punca Punca:

Ralat berlaku kerana MySQL tidak boleh menyimpan aksara unicode tertentu kerana baitnya had.

Penyelesaian:

Untuk menyelesaikan isu ini:

  1. Gunakan Set Aksara utf8mb4: Tingkatkan MySQL kepada versi 5.5 atau lebih baru, kemudian tukar pangkalan data, jadual dan lajur anda untuk menggunakan aksara utf8mb4 set.
  2. Nyatakan Set Aksara dalam Django: Dalam fail tetapan Django anda, tambahkan pilihan berikut untuk menentukan set aksara utf8mb4:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}
  1. Kurangkan Panjang CharField: Jika anda menemui "Kunci yang ditentukan ialah terlalu panjang", kurangkan panjang_maks bagi CharFields dengan indeks sebanyak lebih kurang 33%. Contohnya, tukar daripada 255 kepada 191.

Alternatif:

  • Tukar kepada PostgreSQL: PostgreSQL menyokong 4-bait aksara unicode tanpa pengehadan.
  • Ubah suai Konfigurasi MySQL: Edit konfigurasi MySQL untuk mengalih keluar sekatan bait, tetapi ambil perhatian bahawa ini mungkin memerlukan pengubahsuaian Django tambahan.

Adalah penting untuk ambil perhatian bahawa dengan menukar kepada utf8mb4, anda perlu mengetahui kemungkinan isu keserasian dengan versi lama MySQL atau aplikasi lain yang mungkin tidak menyokong had 4-bait.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod dalam MySQL dengan Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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