Ich habe gerade mit Google gechattet und alles für unsere Instanz zum Laufen gebracht!
Die Standardmethode, um utf8mb4 in Django zum Laufen zu bringen, besteht darin, es als DATABASES['default']['OPTIONS'] in settings.py anzugeben, wie folgt:
'OPTIONS': {'charset': 'utf8mb4'},
Dies verursacht einen OperationalError in App Engine, auf MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; was anscheinend bedeutet, dass dem MySQL C-Client, gegen den Google kompiliert, der utf8mb4-Zeichensatz fehlt.
Entfernen Sie diese OPTIONS-Einstellung.
Die Problemumgehung besteht darin, SET NAMES manuell aufzurufen; Bearbeiten Sie lib/django/db/backends/mysql/base.py und fügen Sie eine conn.query("SET NAMES utf8mb4")-Zeile in DatabaseWrapper.get_new_connection ein, sodass es so aussieht:
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
Stellen Sie sicher, dass Sie auch utf8mb4 im Backend aktiviert haben. Die Migrationsbefehle im App Engine-Django-Tutorial führen zu einer Cloud SQL-Instanz, die für utf8 konfiguriert ist. Ich musste diese Befehle ausführen, um utf8mb4 für die beiden Tabellen zu aktivieren:
ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;