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

使用MySQL Workbench导入CSV失败:createdAt字段无默认值错误

解决MySQL Workbench导入CSV报错createdAt无默认值的问题

问题描述

  • Mac系统下使用MySQL Workbench导入向导将CSV文件导入region表,文件选择、列匹配等步骤操作正常,但最终显示0条记录上传
  • MySQL日志每行数据报错:- Row import failed with error: ("Field 'createdAt' doesn't have a default value", 1364)
  • 通过Postman调用基于Sequelize构建的JavaScript应用,能正常向数据库添加数据,createdAt列可自动生成

原因分析

Sequelize会自动为模型添加createdAt和updatedAt字段,且通过Sequelize操作数据库时会自动填充时间值。但直接使用MySQL Workbench导入CSV时,MySQL服务器会严格检查字段约束:createdAt字段未设置默认值,也不允许为空,因此插入时缺少该字段值就会触发报错。

解决方案

方案1:修改表结构,给createdAt设置默认值

执行以下SQL语句,让MySQL自动为新插入的记录填充当前时间到createdAt字段:

ALTER TABLE region MODIFY COLUMN createdAt DATETIME DEFAULT CURRENT_TIMESTAMP;

修改完成后重新使用Workbench导入向导即可。

方案2:在Workbench导入向导中手动配置createdAt字段值

在导入向导的列匹配步骤,找到createdAt列:

  • 选择「设置值」选项
  • 输入CURRENT_TIMESTAMP(或选择对应的函数选项),让每条导入记录自动填充当前时间

方案3:通过Sequelize脚本批量导入CSV

若不想修改表结构,可编写Node.js脚本借助Sequelize完成导入,Sequelize会自动处理createdAt字段:

  1. 先安装依赖包:
npm install csv-parser
  1. 编写导入脚本(示例):
const fs = require('fs');
const csv = require('csv-parser');
const { sequelize } = require('./models'); // 替换为你的Sequelize实例路径
const Region = require('./models/region')(sequelize, require('sequelize'));

(async () => {
  await sequelize.sync();
  const records = [];

  fs.createReadStream('./countries.csv') // 替换为你的CSV文件路径
    .pipe(csv())
    .on('data', (row) => {
      // 根据CSV实际列名调整字段映射
      records.push({
        country: row.name,
        alpha2Code: row.country,
        alpha3Code: row.country_code,
        lat: row.latitude,
        lng: row.longitude
      });
    })
    .on('end', async () => {
      await Region.bulkCreate(records);
      console.log('CSV数据导入完成');
      process.exit();
    });
})();
  1. 运行脚本完成导入:
node import-csv.js

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:05:05