22

我发现(很难)MySQL 的 UTF8 字符集只有 3 个字节。一些研究表明,我可以通过更改表以利用utf8mb4排序规则并获得完整的 4 字节 UTF 来解决此问题。

我已经这样做了。我的数据库、表和列都已被ALTER编辑为使用此字符集。但是,如果我的数据的 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)

通过 SQL Alchemy 连接时,utf8_general_ci我可以做些什么来更改 from ?utf8mb4_general_ci

4

1 回答 1

39

更改connect_string使用charset=utf8mb4

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
于 2015-07-08T14:11:14.690 回答