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

如何导入含大量数据且有空值列的CSV到MySQL并保留含空值的行

MySQL导入带空值CSV保留所有行的解决方案

问题本质

你遇到的导入丢行问题,是因为CSV里activated_at列的空值在默认导入规则下会被解析为空字符串,而datetime类型不支持存储空字符串,在SQL严格模式下会触发报错,最终对应行被跳过。你当前的表结构中activated_at本身已经允许为NULL,仅需调整导入时的空值处理逻辑即可。

方案1:使用LOAD DATA INFILE命令导入(适合大批量数据)

这是效率最高的导入方式,通过变量中转把空字符串转为合法NULL值即可,示例命令如下:

LOAD DATA INFILE '你的CSV文件本地绝对路径'
INTO TABLE users
-- 以下分隔符配置根据你的CSV实际格式调整
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'
IGNORE 1 ROWS -- 如果CSV第一行是表头请保留该行,无表头则删除
-- 字段映射,将activated_at列先赋值给临时变量
(user_id, created_at, company_id, language, @tmp_activated, state)
-- 空值转换:如果临时变量为空字符串,就转为NULL插入
SET activated_at = NULLIF(@tmp_activated, '');

方案2:可视化工具导入调整配置

如果使用Navicat、MySQL Workbench等可视化工具导入,可在导入向导的字段映射环节做如下调整:

  • 找到activated_at字段对应的源字段配置,修改空值处理规则,将空字符串识别为NULL
  • 部分工具会提供「空值插入NULL而非空字符串」的勾选选项,直接勾选即可

注意事项

  • 如果你的CSV中activated_at的空值是用字面量NULL标记的,将上述SET语句改为SET activated_at = NULLIF(@tmp_activated, 'NULL')即可
  • 导入前可临时关闭严格模式避免不必要报错:执行SET sql_mode = '';,导入完成后再恢复原有配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:21:00