Mysql
 sql >> Database >  >> RDS >> Mysql

Errore di valore della stringa errato di MySQL durante il salvataggio della stringa Unicode in Django

Nessuna di queste risposte mi ha risolto il problema. La causa principale è:

Non puoi memorizzare caratteri a 4 byte in MySQL con il set di caratteri utf-8.

MySQL ha un 3 byte limite su utf-8 caratteri (sì, è strano, ben riassunto da uno sviluppatore Django qui )

Per risolvere questo è necessario:

  1. Cambia il database, la tabella e le colonne MySQL per utilizzare set di caratteri utf8mb4 (disponibile solo da MySQL 5.5 in poi)
  2. Specifica il set di caratteri nel file delle impostazioni di Django come di seguito:

impostazioni.py

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

Nota:durante la ricreazione del database, potresti imbatterti nella 'La chiave specificata era troppo lunga ' problema.

La causa più probabile è un CharField che ha un max_length di 255 e una sorta di indice su di esso (ad esempio unico). Poiché utf8mb4 utilizza il 33% di spazio in più rispetto a utf-8, dovrai ridurre questi campi del 33%.

In questo caso, cambia max_length da 255 a 191.

In alternativa puoi modificare la tua configurazione MySQL per rimuovere questa restrizione ma non senza qualche hackeraggio di django

AGGIORNAMENTO: Ho appena riscontrato di nuovo questo problema e ho finito per passare a PostgreSQL perché non sono stato in grado di ridurre il mio VARCHAR a 191 caratteri.