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

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

Patricia Arquette
Lepaskan: 2024-12-02 00:38:13
asal
176 orang telah melayarinya

How to Fix the

Ralat Nilai Rentetan Tidak Betul semasa Menyimpan Rentetan Unikod dalam Django

Apabila cuba menyimpan rentetan unikod ke model auth_user Django, anda mungkin menghadapi " ralat nilai rentetan yang salah. Ralat ini biasanya disebabkan oleh set aksara MySQL dan tetapan penyusunan.

Set dan Pengumpulan Aksara MySQL

MySQL menyokong set aksara UTF-8, tetapi ia mempunyai Had 3-bait pada aksara. Ini bermakna tidak mungkin untuk menyimpan aksara unicode 4-bait dalam MySQL dengan set aksara UTF-8 standard.

Penjelasan Masalah

Apabila Django cuba menyimpan rentetan unicode kepada model auth_user, MySQL cuba menukarnya kepada set aksara UTF-8. Walau bagaimanapun, jika rentetan mengandungi aksara 4-bait, penukaran gagal dan mengakibatkan ralat "nilai rentetan yang salah".

Penyelesaian

Untuk menyelesaikan isu ini, anda boleh:

  1. Tukar Set Aksara MySQL kepada utf8mb4: MySQL 5.5 dan seterusnya menyokong set aksara utf8mb4, yang membenarkan aksara 4-bait. Cipta semula pangkalan data, jadual dan lajur anda menggunakan utf8mb4.
  2. Tentukan Set Aksara dalam Tetapan Django: Tambahkan yang berikut pada fail tetapan Django anda (settings.py) untuk menentukan set aksara bagi sambungan pangkalan data:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}
Salin selepas log masuk

Tambahan Pertimbangan

  • Jika anda tidak boleh mengurangkan saiz medan VARCHAR anda kepada 191 aksara, anda boleh mempertimbangkan untuk menukar kepada PostgreSQL, yang menyokong aksara unikod 4-bait secara lalai.
  • Jika anda ingin terus menggunakan MySQL dengan utf8mb4, anda mungkin perlu menggunakan hacks pada Django untuk meningkatkan VARCHAR yang dibenarkan saiz.
  • Dalam kes yang jarang berlaku, isu ini juga boleh disebabkan oleh konfigurasi pangkalan data yang mengehadkan saiz kunci. Semak konfigurasi MySQL anda dan laraskannya jika perlu.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Nilai Rentetan Salah\' Semasa Menyimpan Rentetan Unikod dalam Django?. 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