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

MySQL Workbench表导入向导导入CSV选Datetime/Double类型0条导入问题

CSV导入MySQL Workbench类型不匹配问题解决

导入失败原因

  • Date字段格式不匹配:若数值型Date是Unix时间戳(10位/13位整数)或Excel日期序列号,MySQL DATETIME类型无法直接识别这类整数输入,导入向导会默认尝试按YYYY-MM-DD HH:MM:SS格式解析,格式校验失败直接拒绝该行导入。
  • Revenue字段解析失败:CSV内的数值可能存在隐藏字符(前后空格、千位分隔符、货币符号、引号包裹标记),导入向导转DOUBLE时无法识别这类非纯数值内容,触发类型转换错误。
  • TEXT类型无格式校验规则:任意内容都可以作为字符串存储,不会触发转换失败,因此全字段设为TEXT可导入成功。

解决方案

方案1:手动写SQL导入直接转换为目标类型

无需使用图形化向导,通过LOAD DATA命令自定义转换规则,可一步导入为目标类型,示例代码如下:

-- 第一步:创建符合类型要求的目标表
CREATE TABLE sales_data (
    ID INT PRIMARY KEY,
    Product VARCHAR(255),
    Type VARCHAR(255),
    Date DATETIME,
    Revenue DOUBLE
);

-- 第二步:执行CSV导入,替换路径、分隔符等参数为你实际的CSV配置
LOAD DATA INFILE 'C:/your_file_path/data.csv'
INTO TABLE sales_data
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 ROWS -- CSV第一行是表头则保留该行,否则删除
(ID, Product, Type, @raw_date, @raw_revenue)
SET 
  -- 转换时间戳:10位是秒级、13位是毫秒级自动适配
  Date = FROM_UNIXTIME(IF(LENGTH(@raw_date)=13, @raw_date/1000, @raw_date)),
  -- 如果是Excel日期序列号,上面的Date转换替换为下面的语句
  -- Date = DATE_ADD('1900-01-01', INTERVAL (CAST(@raw_date AS UNSIGNED) - 2) DAY),
  -- 先去除前后空格再转DOUBLE
  Revenue = CAST(TRIM(@raw_revenue) AS DOUBLE);

如果执行时报secure_file_priv权限错误,将CSV文件放到MySQL配置项secure_file_priv指定的目录下再执行即可。

方案2:先全量导入为TEXT再转换类型

如果不想写导入SQL,可用向导先把所有字段设为TEXT导入到临时表,再执行类型转换:

-- 新增目标类型的字段
ALTER TABLE your_temp_table
ADD COLUMN Date_New DATETIME,
ADD COLUMN Revenue_New DOUBLE;

-- 执行类型转换赋值
UPDATE your_temp_table
SET 
  Date_New = FROM_UNIXTIME(IF(LENGTH(Date)=13, Date/1000, Date)),
  -- 同样如果是Excel序列号替换上面的Date_New转换逻辑即可
  Revenue_New = CAST(TRIM(Revenue) AS DOUBLE);

-- 验证数据无误后,替换原字段
ALTER TABLE your_temp_table
DROP COLUMN Date,
DROP COLUMN Revenue,
CHANGE COLUMN Date_New Date DATETIME,
CHANGE COLUMN Revenue_New Revenue DOUBLE;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:36:04