You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas将Excel导入MySQL出现UnicodeEncodeError报错如何解决

报错原因与解决方案

报错根因

  • 报错涉及的\ufe0e是Unicode文本变体选择符,属于不可见特殊字符,你当前的数据库连接未指定支持全量Unicode的编码,Windows系统默认字符集charmap/cp1252没有对应字符的映射关系,所以转码失败
  • 你使用的MySQL连接默认编码为utf8(即utf8mb3),最多仅支持3字节的Unicode字符,无法存储4字节及以上的特殊Unicode字符

解决方案

方案1:修改数据库连接配置(首选)

在create_engine的连接字符串末尾追加?charset=utf8mb4,指定使用支持全量Unicode的utf8mb4编码,修改后的代码如下:

from sqlalchemy import create_engine
import pandas as pd
# 连接字符串追加charset=utf8mb4参数
my_conn = create_engine("mysql+mysqldb://dbadmin:Nikhil0199@localhost/djangodatabase?charset=utf8mb4")
df = pd.read_excel("D:\\New Task\\django\\task\\airbnblistings.xlsx")
df.to_sql(con = my_conn, name = 'airbnblistings', if_exists = 'replace', index = True)

方案2:清理DataFrame中的特殊不可见字符

如果修改连接配置后仍报错,可添加代码主动过滤所有字符串列中的特殊Unicode控制字符:

import re
# 定义清理函数,移除所有非可打印ASCII字符和Unicode变体选择符
def clean_special_chars(text):
    if isinstance(text, str):
        # 移除\uFE00-\uFE0F区间的变体选择符,以及其他控制字符
        text = re.sub(r'[\ufe00-\ufe0f]', '', text)
        text = text.encode('utf-8', 'ignore').decode('utf-8')
    return text

# 对所有字符串列应用清理函数
for col in df.select_dtypes(include=['object']).columns:
    df[col] = df[col].apply(clean_special_chars)

方案3:更换MySQL连接驱动(可选)

如果mysqldb驱动存在编码兼容问题,可更换为pymysql驱动,先执行pip install pymysql安装,再修改连接字符串前缀为mysql+pymysql:

my_conn = create_engine("mysql+pymysql://dbadmin:Nikhil0199@localhost/djangodatabase?charset=utf8mb4")

内容的提问来源于stack exchange,提问作者Nikhil Yadavaram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:08