Właśnie rozmawiałem z Google i wszystko działało dla naszej instancji!
Standardowym sposobem na uruchomienie utf8mb4 w Django jest określenie go jako BAZY DANYCH['default']['OPCJE'] w settings.py, w ten sposób:
'OPTIONS': {'charset': 'utf8mb4'},
Powoduje to wystąpienie OperationalError w App Engine w MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; co najwyraźniej oznacza, że klient MySQL C, z którym Google się kompiluje, nie ma zestawu znaków utf8mb4.
Usuń to ustawienie OPTIONS.
Rozwiązaniem jest ręczne wywołanie SET NAMES; edytuj lib/django/db/backends/mysql/base.py i dodaj linię conn.query("SET NAMES utf8mb4") do DatabaseWrapper.get_new_connection, więc wygląda to tak:
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
Upewnij się, że masz również włączone utf8mb4 na zapleczu. Polecenia migracji w samouczku App Engine Django powodują, że instancja Cloud SQL jest skonfigurowana do obsługi utf8. Musiałem uruchomić te polecenia, aby włączyć utf8mb4 na dwóch tabelach:
ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;