Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd nieprawidłowej wartości ciągu MySQL podczas zapisywania ciągu Unicode w Django

Żadna z tych odpowiedzi nie rozwiązała problemu. Główną przyczyną jest:

Nie można przechowywać 4-bajtowych znaków w MySQL z zestawem znaków utf-8.

MySQL ma 3 bajtowy limit znaków utf-8 (tak, to kiepskie, ładnie podsumowane przez programistę Django )

Aby rozwiązać ten problem, musisz:

  1. Zmień bazę danych, tabelę i kolumny MySQL, aby korzystały z zestaw znaków utf8mb4 (dostępne tylko od MySQL 5.5 i nowszych)
  2. Określ zestaw znaków w pliku ustawień Django, jak poniżej:

settings.py

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

Uwaga:podczas odtwarzania bazy danych możesz natrafić na „określony klucz był za długi ' wydanie.

Najbardziej prawdopodobną przyczyną jest CharField który ma max_length 255 i jakiś rodzaj indeksu (np. unikalny). Ponieważ utf8mb4 zajmuje o 33% więcej miejsca niż utf-8, będziesz musiał zmniejszyć te pola o 33%.

W takim przypadku zmień max_length z 255 na 191.

Alternatywnie możesz edytować konfigurację MySQL, aby usunąć to ograniczenie ale nie bez trochę hackerów django

AKTUALIZACJA: Właśnie ponownie natknąłem się na ten problem i skończyłem przełączenie na PostgreSQL ponieważ nie mogłem zmniejszyć mojego VARCHAR do 191 znaków.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skonfiguruj bazę danych i utwórz użytkownika tylko do odczytu w AWS Redshift i Mysql

  2. Wzory do obliczania odległości geograficznej

  3. MySQL przyznaje wszystkie uprawnienia do bazy danych z wyjątkiem jednej tabeli

  4. Co sprawdzić, jeśli wykorzystanie pamięci MySQL jest wysokie?

  5. Zaznaczyć wszystkie kolumny z wyjątkiem jednej w MySQL?