sql >> Database teknologi >  >> RDS >> Mysql

Kan ikke bruge utf8mb4 tegnsæt med CloudSQL på AppEngine Python

Jeg chattede lige med google og fik alt til at fungere for vores instans!

Standardmetoden til at få utf8mb4 til at fungere i Django er at angive den som DATABASES['default']['OPTIONS'] i settings.py, sådan her:

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

Dette forårsager en Operational Error i App Engine på MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; hvilket tilsyneladende betyder, at MySQL C-klienten google kompilerer imod mangler utf8mb4-tegnsættet.

Fjern denne indstilling for OPTIONS.

Løsningen er manuelt at kalde SET NAMES; rediger lib/django/db/backends/mysql/base.py og tilføj en conn.query("SET NAMES utf8mb4") linje i DatabaseWrapper.get_new_connection, så det ser sådan ud:

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

Sørg for, at du også har utf8mb4 aktiveret på backend. Migreringskommandoerne i App Engine Django-selvstudiet resulterer i en Cloud SQL-instans konfigureret til utf8. Jeg var nødt til at køre disse kommandoer for at aktivere utf8mb4 på de to tabeller:

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



  1. SQLite JSON_SET()

  2. TSQL - Tilføj kolonne til alle tabeller i en database [ Markøreksempel]

  3. mysql-forespørgsel - 2 fremmednøgler

  4. MySQL GROUP Efter optælling