使用 SQLAlchemy 和 pymysql,如何设置连接以使用 utf8mb4?
Using SQLAlchemy and pymysql, how can I set the connection to utilize utf8mb4?
我发现(困难的方法)MySQL's UTF8 character set is only 3 bytes. A bit of research shows I can fix this by changing the tables to utilize the 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)
当通过 SQL Alchemy 连接时,如何将 utf8_general_ci
更改为 utf8mb4_general_ci
?
将 connect_string
更改为使用 charset=utf8mb4
:
connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)
我发现(困难的方法)MySQL's UTF8 character set is only 3 bytes. A bit of research shows I can fix this by changing the tables to utilize the 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)
当通过 SQL Alchemy 连接时,如何将 utf8_general_ci
更改为 utf8mb4_general_ci
?
将 connect_string
更改为使用 charset=utf8mb4
:
connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)