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

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

Susan Sarandon
Susan Sarandonasal
2024-11-24 00:51:10441semak imbas

How to Fix

Ralat Nilai Rentetan Tidak Betul Semasa Menyimpan Aksara Unikod dalam MySQL dengan Django

Apabila cuba menyimpan rentetan unikod ke model auth_user dalam Django, anda mungkin menghadapi mesej ralat berikut:

Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104

Potensi Punca

Ralat ini biasanya disebabkan oleh perkara berikut:

  • Had set aksara: MySQL mempunyai had 3-bait untuk aksara UTF-8 .
  • Tetapan pangkalan data dan jadual: Pangkalan data, jadual dan lajur mesti menggunakan set aksara utf8mb4 untuk menyokong aksara unikod 4-bait.

Penyelesaian

Untuk menyelesaikan isu ini, ikut langkah berikut:

  1. Tukar pangkalan data, jadual dan lajur untuk menggunakan aksara utf8mb4 set:

    • Jalankan pertanyaan berikut untuk mencipta pangkalan data baharu dengan set aksara utf8mb4:
    CREATE DATABASE db_name CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
    • Gunakan pernyataan ALTER TABLE untuk mengubah suai jadual sedia ada dan lajur:
    ALTER TABLE auth_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  2. Nyatakan set aksara dalam tetapan Django:

    Dalam fail tetapan Django (settings.py) , tambah yang berikut baris:

    DATABASES = {
        'default': {
            'ENGINE':'django.db.backends.mysql',
            ...
            'OPTIONS': {'charset': 'utf8mb4'},
        }
    }

Pertimbangan Tambahan

  • Jika anda mempunyai lajur CharField sedia ada dengan panjang maksimum 255 dan indeks dihidupkan mereka, anda perlu mengurangkan panjang maksimum kepada 191 untuk mengelakkan "Kunci yang ditentukan terlalu panjang" ralat.
  • Sebagai alternatif, anda boleh mengedit konfigurasi MySQL anda untuk mengalih keluar sekatan panjang aksara. Walau bagaimanapun, ini memerlukan pengubahsuaian tambahan kepada Django.
  • Jika boleh, pertimbangkan untuk menukar kepada PostgreSQL kerana ia menyokong sehingga 4-bait aksara unicode dalam UTF-8 tanpa sekatan ini.

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