Используя SQLAlchemy и pymysql, как я могу установить соединение для использования utf8mb4?

я обнаружил (на горьком опыте), что набор символов UTF8 MySQL всего 3 байта. Немного исследований показывает, что я могу исправить это, изменив таблицы, чтобы использовать utf8mb4 параметры сортировки и получить полные 4 байта UTF должны быть.

Я так и сделал. Моя база данных, таблицы и столбцы все были ALTERed, чтобы использовать эту кодировку. Однако я все еще получаю это сообщение, если у меня есть данные с кодовыми точками unicode больше, чем U+FFFF:

Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"

я обнаружил, что у меня есть следующие настройки:

> show variables like '%collation%';

collation_connection  utf8_general_ci
collation_database    utf8mb4_general_ci
collation_server      utf8mb4_general_ci

на collation_server был установлен путем внесения изменений в my.cnf. Мой вопрос, как я могу изменить соединение? В настоящее время я подключаюсь к базе данных с помощью SQL Alchemy и pymysql следующим образом:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
engine = create_engine(connect_string, convert_unicode=True, echo=False)
session = sessionmaker()
session.configure(bind=engine)

что я могу сделать, чтобы изменить от utf8_general_ci to utf8mb4_general_ci при подключении через SQL Alchemy?

1 ответов


изменить connect_string использовать charset=utf8mb4:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)