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

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
    
  • 调整导入命令的字段解析规则
    原命令中--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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:52:44