使用SQLAlchemy和pymysql,如何设置连接以利用utf8mb4?

2024-04-29 14:38:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现MySQL's UTF8 character set只有3个字节。一些研究表明,我可以通过改变表来利用^{}排序规则来解决这个问题,并得到UTF应该是的完整4字节。

我已经这么做了。我的数据库、表和列都使用了这个字符集。但是,如果数据的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

通过对my.cnf进行更改来设置collation_server。我的问题是,如何更改连接?我目前使用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炼金术连接时,我可以做些什么来从utf8_general_ci更改为utf8mb4_general_ci


Tags: ci数据库dbsqlstring字节serverconnect
1条回答
网友
1楼 · 发布于 2024-04-29 14:38:07

connect_string更改为使用charset=utf8mb4

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

相关问题 更多 >