Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi giá trị chuỗi không chính xác của MySQL khi lưu chuỗi unicode trong Django

Không có câu trả lời nào trong số này giải quyết được vấn đề cho tôi. Nguyên nhân sâu xa là:

Bạn không thể lưu trữ các ký tự 4 byte trong MySQL với bộ ký tự utf-8.

MySQL có giới hạn 3 byte đối với ký tự utf-8 (vâng, thật tuyệt vời, được một nhà phát triển Django tóm tắt độc đáo tại đây )

Để giải quyết vấn đề này, bạn cần:

  1. Thay đổi cơ sở dữ liệu MySQL, bảng và các cột của bạn để sử dụng bộ ký tự utf8mb4 (chỉ khả dụng từ MySQL 5.5 trở đi)
  2. Chỉ định bộ ký tự trong tệp cài đặt Django của bạn như bên dưới:

settings.py

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

Lưu ý:Khi tạo lại cơ sở dữ liệu của mình, bạn có thể gặp phải ' Khóa được chỉ định quá dài ' phát hành.

Nguyên nhân rất có thể là do CharField có max_length là 255 và một số loại chỉ mục trên đó (ví dụ:duy nhất). Bởi vì utf8mb4 sử dụng nhiều hơn 33% không gian so với utf-8, bạn sẽ cần phải làm cho các trường này nhỏ hơn 33%.

Trong trường hợp này, hãy thay đổi max_length từ 255 thành 191.

Ngoài ra, bạn có thể chỉnh sửa cấu hình MySQL của bạn để loại bỏ hạn chế này nhưng không phải là không có một số hackery django

CẬP NHẬT: Tôi lại gặp phải sự cố này và kết thúc chuyển sang PostgreSQL vì tôi không thể giảm VARCHAR của mình đến 191 ký tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khắc phục “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong MySQL

  2. MySQL cấp đặc quyền cho người dùng cho cơ sở dữ liệu

  3. Truy vấn với nhiều giá trị trong một cột

  4. Xuất MySQL vào outfile:Các ký tự thoát CSV

  5. MySQL là gì:Tổng quan