Mysql
 sql >> база данни >  >> RDS >> Mysql

Не може да се използва набор от символи utf8mb4 с CloudSQL на AppEngine Python

Току-що разговарях с Google и накарах всичко да работи за нашия екземпляр!

Стандартният начин да накарате utf8mb4 да работи в Django е да го посочите като DATABASES['default']['OPTIONS'] в settings.py, както следва:

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

Това причинява OperationalError в App Engine, на MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; което очевидно означава, че на клиента MySQL C, срещу който google компилира, липсва наборът от символи utf8mb4.

Премахнете тази настройка OPTIONS.

Решението е ръчно да извикате SET NAMES; редактирайте lib/django/db/backends/mysql/base.py и добавете ред conn.query("SET NAMES utf8mb4") в DatabaseWrapper.get_new_connection, така че да изглежда така:

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

Уверете се, че имате активиран utf8mb4 в бекенда. Командите за миграция в урока за App Engine Django водят до облачен SQL екземпляр, конфигуриран за utf8. Трябваше да изпълня тези команди, за да активирам utf8mb4 на двете таблици:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между real_escape_string и подготви ()?

  2. MySQL конкатенира низ към колона

  3. Синтактична грешка поради използването на запазена дума като име на таблица или колона в MySQL

  4. подготвено изявление с Eloquent ORM / laravel

  5. Каква е разликата между MyISAM и InnoDB?