Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan nilai string salah MySQL saat menyimpan string unicode di Django

Tak satu pun dari jawaban ini memecahkan masalah bagi saya. Akar penyebabnya adalah:

Anda tidak dapat menyimpan karakter 4-byte di MySQL dengan set karakter utf-8.

MySQL memiliki batas 3 byte pada karakter utf-8 (ya, ini aneh, diringkas dengan baik oleh pengembang Django di sini )

Untuk mengatasi ini, Anda perlu:

  1. Ubah database, tabel, dan kolom MySQL Anda untuk menggunakan kumpulan karakter utf8mb4 (hanya tersedia dari MySQL 5.5 dan seterusnya)
  2. Tentukan rangkaian karakter dalam file pengaturan Django Anda seperti di bawah ini:

settings.py

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

Catatan:Saat membuat ulang basis data, Anda mungkin mengalami 'Kunci yang ditentukan terlalu panjang ' isu.

Penyebab yang paling mungkin adalah CharField yang memiliki max_length 255 dan semacam indeks di atasnya (mis. Karena utf8mb4 menggunakan 33% lebih banyak ruang daripada utf-8, Anda harus membuat bidang ini 33% lebih kecil.

Dalam hal ini, ubah max_length dari 255 menjadi 191.

Atau Anda dapat mengedit konfigurasi MySQL Anda untuk menghapus batasan ini tetapi bukan tanpa peretasan Django

PERBARUI: Saya baru saja mengalami masalah ini lagi dan akhirnya beralih ke PostgreSQL karena saya tidak dapat mengurangi VARCHAR saya hingga 191 karakter.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Fungsi TRIM() Bekerja di MySQL

  2. Bagaimana cara menambahkan referensi ke konektor MySQL untuk .NET?

  3. Apakah ada cara untuk mengambil ID peningkatan otomatis dari pernyataan yang disiapkan

  4. Replikasi MySQL:Transaksi Salah dalam Replikasi Berbasis GTID

  5. Menyetel ulang penunjuk array dalam hasil PDO