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;