如何使用 to_sql 对表创建强制执行 utf8mb4?
Posted
技术标签:
【中文标题】如何使用 to_sql 对表创建强制执行 utf8mb4?【英文标题】:How to enforce utf8mb4 on table creation with to_sql? 【发布时间】:2019-10-14 22:50:31 【问题描述】:我正在从 Python 中的 API 导入一些数据,对其进行格式化并使用 to_sql 将其保存到 mysql 数据库中。
results, types, valid = self.process_data(data, [])
if valid:
results.to_sql(
con=self.db.connection,
name="degreed_" + method,
if_exists="replace",
index=False,
dtype=types,
)
在我的连接中,我已将 utf8mb4 指定为字符集:
self.connection = create_engine(
'mysql+mysqlconnector://0:1@2/3?charset=utf8mb4'.
format(database_username, database_password, database_ip, database_name))
在我的类型中,我的文本列如下:
NVARCHAR(length=500, collation='utf8mb4_bin').
但是,我仍然收到错误消息:
COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'utf8'
在 MySQL 中,我的 character_set_client 是 utf8mb4,默认表字符集是 utf8mb4。为什么字符集是utf8?
抱歉,如果我在这里做任何愚蠢的事情,我对 sqlalchemy 和 mysql 还是很陌生。
【问题讨论】:
【参考方案1】:原来问题是我使用的是 NVARCHAR 而不是 VARCHAR,所以结果被转换为 UTF8。
【讨论】:
UTF-8
的 MySQL 名称是 utf8mb4
。以上是关于如何使用 to_sql 对表创建强制执行 utf8mb4?的主要内容,如果未能解决你的问题,请参考以下文章
Python:使用 dataframe.to_sql 向 MySQL 添加主键
使用 python 对 postgres 执行 upsert 操作,如 pandas to_sql 函数