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

Nelze použít znakovou sadu utf8mb4 s CloudSQL na AppEngine Python

Právě jsem chatoval s googlem a vše funguje pro naši instanci!

Standardní způsob, jak zprovoznit utf8mb4 v Django, je zadat jej jako DATABASES['default']['OPTIONS'] v settings.py, takto:

'OPTIONS': {'charset': 'utf8mb4'},

To způsobí chybu OperationalError v App Engine na MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; což zřejmě znamená, že klient MySQL C, proti kterému google kompiluje, chybí znaková sada utf8mb4.

Odeberte toto nastavení OPTIONS.

Řešením je ruční volání SET NAMES; upravte lib/django/db/backends/mysql/base.py a přidejte řádek conn.query("SET NAMES utf8mb4") do DatabaseWrapper.get_new_connection, takže to vypadá takto:

def get_new_connection(self, conn_params):
    conn = Database.connect(**conn_params)
    conn.encoders[SafeText] = conn.encoders[six.text_type]
    conn.encoders[SafeBytes] = conn.encoders[bytes]
    conn.query("SET NAMES utf8mb4")
    return conn

Ujistěte se, že máte také povoleno utf8mb4 na backendu. Výsledkem příkazů migrace ve výukovém programu App Engine Django je instance Cloud SQL nakonfigurovaná pro utf8. Potřeboval jsem spustit tyto příkazy, abych povolil utf8mb4 na dvou tabulkách:

ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;



  1. Parametrizované dotazy pomocí psycopg2 / Python DB-API a PostgreSQL

  2. Jak filtrovat datum pomocí datetimepicker přes databázi

  3. MySQL ODBC konektor 32bit nebo 64bit?

  4. jak obnovit pohotovostní databázi z chybějícího archivního protokolu