sql >> Database >  >> RDS >> Mysql

Kan utf8mb4-tekenset niet gebruiken met CloudSQL op AppEngine Python

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;



  1. Inverse van SQL LIKE '%value%'

  2. Wat is dynamische SQL?

  3. Omgaan met onbetrouwbare netwerken bij het maken van een HA-oplossing voor MySQL of MariaDB

  4. ORDER BY-items moeten in de selectielijst verschijnen als SELECT DISTINCT is opgegeven