使用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
相关产品推荐
相关产品推荐

