sql >> Databasteknik >  >> RDS >> Mysql

Det går inte att använda utf8mb4 teckenuppsättning med CloudSQL på AppEngine Python

Jag chattade precis med google och fick allt att fungera för vår instans!

Standardsättet för att få utf8mb4 att fungera i Django är att ange det som DATABASER['default']['OPTIONS'] i settings.py, så här:

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

Detta orsakar ett Operational Error i App Engine, på MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; vilket tydligen betyder att MySQL C-klienten google kompilerar mot saknar teckenuppsättningen utf8mb4.

Ta bort den här OPTIONS-inställningen.

Lösningen är att manuellt anropa SET NAMES; redigera lib/django/db/backends/mysql/base.py och lägg till en conn.query("SET NAMES utf8mb4") rad i DatabaseWrapper.get_new_connection, så det ser ut så här:

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

Se till att du även har utf8mb4 aktiverat på backend. Migreringskommandona i App Engine Django-handledningen resulterar i en Cloud SQL-instans konfigurerad för utf8. Jag behövde köra dessa kommandon för att aktivera utf8mb4 på de två tabellerna:

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



  1. Det går inte att infoga post i SQLite Database från Firebase Message Service när appen är i bakgrunden eller är stängt

  2. PHP Mysql - Ta bort-knappen fortsätter att ta bort senaste raden

  3. Föreslaget sätt att köra flera SQL-satser i Python?

  4. Räknar totala rader och grupperar efter en kolumn i mysql