Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehler in MySQL mit falschem Zeichenfolgenwert beim Speichern der Unicode-Zeichenfolge in Django

Keine dieser Antworten löste das Problem für mich. Die Hauptursache ist:

Sie können keine 4-Byte-Zeichen in MySQL mit dem UTF-8-Zeichensatz speichern.

MySQL hat eine 3-Byte-Grenze für UTF-8-Zeichen (Ja, es ist verrückt, schön zusammengefasst von einem Django-Entwickler hier )

Um dies zu lösen, müssen Sie:

  1. Ändern Sie Ihre MySQL-Datenbank, -Tabelle und -Spalten, um den utf8mb4 Zeichensatz (erst verfügbar ab MySQL 5.5)
  2. Geben Sie den Zeichensatz in Ihrer Django-Einstellungsdatei wie folgt an:

settings.py

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

Hinweis:Wenn Sie Ihre Datenbank neu erstellen, können Sie auf 'Der angegebene Schlüssel war zu lang stoßen ' Ausgabe.

Die wahrscheinlichste Ursache ist ein CharField die eine max_length von 255 und eine Art Index darauf hat (z. B. eindeutig). Da utf8mb4 33 % mehr Speicherplatz benötigt als utf-8, müssen Sie diese Felder um 33 % kleiner machen.

Ändern Sie in diesem Fall max_length von 255 auf 191.

Alternativ können Sie Ihre MySQL-Konfiguration bearbeiten, um diese Einschränkung zu entfernen aber nicht ohne etwas Django-Hacker

AKTUALISIERUNG: Ich bin gerade wieder auf dieses Problem gestoßen und bin schließlich zu PostgreSQL gewechselt weil ich meinen VARCHAR nicht reduzieren konnte bis 191 Zeichen.