Rumah > pangkalan data > tutorial mysql > 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
Lepaskan: 2024-11-24 00:51:10
asal
518 orang telah melayarinya

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
Salin selepas log masuk

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';
    Salin selepas log masuk
    • 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;
    Salin selepas log masuk
  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'},
        }
    }
    Salin selepas log masuk

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!

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