Mysql
 sql >> база данни >  >> RDS >> Mysql

Грешка при неправилна стойност на низа в MySQL при запазване на Unicode низ в Django

Нито един от тези отговори не реши проблема за мен. Основната причина е:

Не можете да съхранявате 4-байтови знаци в MySQL с набор от символи utf-8.

MySQL има 3 байта ограничение за utf-8 символи (да, страхотно е, добре обобщено от разработчик на Django тук )

За да разрешите това, трябва:

  1. Променете вашата MySQL база данни, таблица и колони, за да използвате utf8mb4 набор от знаци (достъпно само от MySQL 5.5 нагоре)
  2. Посочете набора от знаци във вашия файл с настройки на Django, както следва:

settings.py

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

Забележка:Когато пресъздавате базата си данни, може да попаднете на „Указаният ключ беше твърде дълъг ' проблем.

Най-вероятната причина е CharField който има max_length от 255 и някакъв вид индекс върху него (например уникален). Тъй като utf8mb4 използва 33% повече пространство от utf-8, ще трябва да направите тези полета с 33% по-малки.

В този случай променете max_length от 255 на 191.

Като алтернатива можете да редактирате конфигурацията на MySQL, за да премахнете това ограничение но не и без хакерство на джанго

АКТУАЛИЗИРАНЕ: Току-що се сблъсках с този проблем отново и накрая превключих към PostgreSQL SQL защото не успях да намаля моя VARCHAR до 191 знака.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да свържа приложението за Android към базата данни MySQL?

  2. Синтаксис на SQL ALTER TABLE – Изброен от СУБД

  3. MySQL Fire Trigger както за вмъкване, така и за актуализиране

  4. Истински escape низ и PDO

  5. Как работи функцията RTRIM() в MySQL