Используя SQLAlchemy и pymysql, как я могу установить соединение для использования utf8mb4?
я обнаружил (на горьком опыте), что набор символов UTF8 MySQL всего 3 байта. Немного исследований показывает, что я могу исправить это, изменив таблицы, чтобы использовать utf8mb4
параметры сортировки и получить полные 4 байта UTF должны быть.
Я так и сделал. Моя база данных, таблицы и столбцы все были ALTER
ed, чтобы использовать эту кодировку. Однако я все еще получаю это сообщение, если у меня есть данные с кодовыми точками 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)