sql >> Base de Datos >  >> RDS >> Mysql

No se puede usar el juego de caracteres utf8mb4 con CloudSQL en AppEngine Python

¡Acabo de chatear con Google y todo funcionó para nuestra instancia!

La forma estándar de hacer que utf8mb4 funcione en Django es especificarlo como DATABASES['default']['OPTIONS'] en settings.py, así:

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

Esto provoca un OperationalError en App Engine, en MySQLdb 1.2.4b4/1.2.4/1.2.5; lo que aparentemente significa que al cliente MySQL C contra el que Google está compilando le falta el juego de caracteres utf8mb4.

Elimina esta configuración de OPCIONES.

La solución consiste en llamar manualmente a SET NAMES; edite lib/django/db/backends/mysql/base.py y agregue una línea conn.query("SET NAMES utf8mb4") en DatabaseWrapper.get_new_connection, para que se vea así:

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

Asegúrese de que también tiene habilitado utf8mb4 en el backend. Los comandos de migración del instructivo Django de App Engine dan como resultado una instancia de Cloud SQL configurada para utf8. Necesitaba ejecutar estos comandos para habilitar utf8mb4 en las dos tablas:

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