sql >> Databáze >  >> RDS >> Mysql

Chyba nesprávné hodnoty řetězce MySQL při ukládání řetězce unicode v Django

Žádná z těchto odpovědí pro mě problém nevyřešila. Hlavní příčinou je:

V MySQL nelze ukládat 4bajtové znaky se znakovou sadou utf-8.

MySQL má 3bajtový limit na znaky utf-8 (ano, je to šílené, pěkně shrnuto od vývojáře Django zde )

Chcete-li to vyřešit, musíte:

  1. Změňte databázi, tabulku a sloupce MySQL tak, aby používali znaková sada utf8mb4 (k dispozici pouze od MySQL 5.5 a novější)
  2. Uveďte znakovou sadu v souboru nastavení Django, jak je uvedeno níže:

settings.py

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

Poznámka:Při opětovném vytváření databáze můžete narazit na 'Zadaný klíč byl příliš dlouhý ' problém.

Nejpravděpodobnější příčinou je CharField který má max_length 255 a na něm nějaký druh indexu (např. jedinečný). Protože utf8mb4 využívá o 33 % více prostoru než utf-8, budete muset tato pole zmenšit o 33 %.

V tomto případě změňte max_length z 255 na 191.

Případně můžete upravit konfiguraci MySQL a toto omezení odstranit ale ne bez django hackery

AKTUALIZACE: Právě jsem znovu narazil na tento problém a skončil jsem přechodem na PostgreSQL protože jsem nebyl schopen snížit svůj VARCHAR až 191 znaků.



  1. Jaký je nejlepší způsob zobrazení obrázku z databáze serveru SQL v asp.net?

  2. Oracle dynamic DESC a ASC v pořadí podle

  3. Používání klientských aplikací MySQL

  4. Existuje v JPQL takový výraz CASE?