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

MySQL8.0使用mysqlimport导入SQL文件报1406、1261错误如何解决

核心根因

所有报错的核心触发原因是用错了导入工具:

  • mysqlimport是LOAD DATA INFILE语法的命令行封装,仅支持导入制表符/逗号分隔的纯文本裸数据(如CSV、TXT格式的逐行数据文件),本身不具备SQL语法解析能力。
  • 用它加载mysqldump导出的、包含CREATE TABLE/INSERT语句的SQL脚本时,程序会把整个SQL文件的纯文本内容按默认分隔符切分,硬塞到表字段中,从第一行数据开始就完全错位,和SQL文件里写的插入值没有任何关联。
修复步骤
  • 先恢复目标库ecm2中table_name的原始表结构,把之前修改为TEXT类型的country字段改回VARCHAR(20),保证表结构和导出时的定义完全一致。
  • 弃用mysqlimport命令,换用mysql命令行客户端执行SQL脚本导入,在CMD中执行以下命令,执行后输入root账号密码即可开始导入:
    mysql -uroot -p ecm2 < "C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\table_name.sql"
    

    注意:标准mysqldump导出的文件默认包含DROP TABLE IF EXISTS、CREATE TABLE语句,导入时会自动删除目标库的同名旧表后重建并导入全量数据。如果你需要保留现有目标表、仅追加数据,提前用文本编辑器打开SQL文件,删除其中的删表、建表语句,仅保留INSERT相关部分再执行导入即可。

  • 导入完成后可登录MySQL执行抽查语句,确认数据导入正确:
    USE ecm2;
    SELECT country, country_long, name, gid_no FROM table_name LIMIT 5;
    
对应报错的触发逻辑
  • 报错Error: 1406, Data too long for column 'country' at row 1:mysqlimport把SQL文件开头的建表语句文本当成第一行第一列的数据插入,塞入的内容是大段SQL定义文本,长度远超过VARCHAR(20)的限制,和INSERT语句里写的3-4位国家编码没有任何关系。
  • 把country字段改为TEXT后触发Error: 1261, Row 1 doesn't contain data for all columns:mysqlimport按默认的换行、制表符切分SQL文本时,切出来的字段数量和表定义的22个字段数量不匹配,因此触发列数缺失报错。

内容的提问来源于stack exchange,提问作者Sachin D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:42