MySQL导入时出现异常数据截断问题求助
MySQL导入CSV数据异常:数据截断/乱码问题解决
问题现象
使用LOAD DATA或mysqlimport导入CSV时,原数据9965/3导入后查询出现异常,执行trim/ltrim操作后数据被奇怪截断,Windows和Linux环境下均出现此问题。
排查与解决步骤
检查文件隐藏字符与换行符
用工具查看文件中的不可见字符:- Linux下执行:
cat -A orders_icdodiagnosis.csv,查看是否有^M(Windows换行符\r)或其他控制字符; - Windows下用命令行执行:
type orders_icdodiagnosis.csv,或用Notepad++开启「显示所有字符」功能检查。
如果存在\r,可将行终止符改为\r\n,或先转换文件格式:
# Linux下转换为Unix格式 dos2unix orders_icdodiagnosis.csv- Linux下执行:
调整导入命令的字段解析规则
原命令中--fields-optionally-enclosed-by='"'参数可能在无引号数据场景下引发解析异常,去掉该参数重试:mysqlimport -p -uroot --lines-terminated-by='\n' --fields-terminated-by=',' --local -f -i <dbname> orders_icdodiagnosis.csv对应
LOAD DATA语句可调整为:load data local infile '/srv/django/tmp/icdo_prev/orders_icdodiagnosis.csv' into table orders_icdodiagnosis character set latin1 fields terminated by ',' lines terminated by '\n';验证字符集与字段类型匹配
- 确认表中
code字段的类型(如varchar长度是否足够,是否为char类型导致的空格填充); - 尝试更换字符集导入,比如将
character set latin1改为character set utf8mb4,排查编码解析问题。
- 确认表中
逐行隔离测试
提取异常行单独存入小CSV文件(如test.csv仅包含9965/3),执行导入测试:load data local infile '/srv/django/tmp/test.csv' into table orders_icdodiagnosis character set latin1 fields terminated by ',' lines terminated by '\n';如果测试正常,说明原文件存在跨行数据或其他行的干扰,需检查文件整体格式。
排查数据中的特殊字符
用专业文本编辑器(如Notepad++、Sublime Text)打开CSV,查看9965/3前后是否存在全角字符、Unicode控制字符等不可见内容,这类字符会导致解析异常。
内容的提问来源于stack exchange,提问作者J. White
相关产品推荐
相关产品推荐

