【问题标题】:How to enforce utf8mb4 on table creation with to_sql?如何使用 to_sql 对表创建强制执行 utf8mb4?
【发布时间】: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 还是很陌生。

【问题讨论】:

    标签: python mysql pandas sqlalchemy utf8mb4


    【解决方案1】:

    原来问题是我使用的是 NVARCHAR 而不是 VARCHAR,所以结果被转换为 UTF8。

    【讨论】:

    • UTF-8 的 MySQL 名称是 utf8mb4
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2018-07-26
    • 2018-05-13
    • 2021-07-10
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多