Ik heb net met Google gechat en alles werkend gekregen voor onze instantie!
De standaardmanier om utf8mb4 in Django te laten werken, is door het als DATABASES['default']['OPTIONS'] in settings.py op te geven, zoals dit:
'OPTIONS': {'charset': 'utf8mb4'},
Dit veroorzaakt een operationele fout in App Engine, op MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; wat blijkbaar betekent dat de MySQL C-client waar Google tegen compileert de utf8mb4-tekenset mist.
Verwijder deze OPTIES-instelling.
De tijdelijke oplossing is om SET NAMES handmatig aan te roepen; bewerk lib/django/db/backends/mysql/base.py en voeg een regel conn.query("SET NAMES utf8mb4") toe aan DatabaseWrapper.get_new_connection, zodat het er als volgt uitziet:
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
Zorg ervoor dat utf8mb4 ook is ingeschakeld op de backend. De migratieopdrachten in de App Engine Django-zelfstudie resulteren in een Cloud SQL-instantie die is geconfigureerd voor utf8. Ik moest deze commando's uitvoeren om utf8mb4 op de twee tabellen in te schakelen:
ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;