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

MySQL forkert strengværdifejl ved lagring af unicode-streng i Django

Ingen af ​​disse svar løste problemet for mig. Grundårsagen er:

Du kan ikke gemme 4-byte-tegn i MySQL med utf-8-tegnsættet.

MySQL har en 3 byte-grænse på utf-8 tegn (ja, det er vildt, pænt opsummeret af en Django-udvikler her )

For at løse dette skal du:

  1. Skift din MySQL-database, tabel og kolonner for at bruge utf8mb4 tegnsæt (kun tilgængelig fra MySQL 5.5 og frem)
  2. Angiv tegnsættet i din Django-indstillingsfil som nedenfor:

settings.py

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

Bemærk:Når du genskaber din database, kan du løbe ind i 'den angivne nøgle var for lang ' problem.

Den mest sandsynlige årsag er et CharField som har en max_length på 255 og en form for indeks på den (f.eks. unik). Fordi utf8mb4 bruger 33 % mere plads end utf-8, bliver du nødt til at gøre disse felter 33 % mindre.

I dette tilfælde skal du ændre max_length fra 255 til 191.

Alternativt kan du redigere din MySQL-konfiguration for at fjerne denne begrænsning men ikke uden noget django-hackeri

OPDATERING: Jeg stødte lige ind i dette problem igen og endte med at skifte til PostgreSQL fordi jeg ikke var i stand til at reducere min VARCHAR til 191 tegn.



  1. Hvordan make_interval() virker i PostgreSQL

  2. ClusterControl 1.5 - Automatisk sikkerhedskopieringsbekræftelse, byg slave fra sikkerhedskopiering og skyintegration

  3. MySQL - ORDER BY værdier inden for IN()

  4. Sådan tilføjes et logo til en rapporthoved i Microsoft Access