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

使用LOAD DATA LOCAL时首列日期首行存为0000-00-00 00:00:00问题排查

MySQL LOAD DATA LOCAL首行日期导入异常问题分析

问题现象

当使用MySQL的LOAD DATA LOCAL语句导入CSV数据时,若日期列为首列,仅首行的日期会被存储为0000-00-00 00:00:00,其余行日期导入正常;若将字符串列作为首列则无此异常。当前使用的MySQL版本为8.0.30-0ubuntu0.20.04.2。

测试案例

案例A:日期列为首列

  • CSV文件前两行内容:
2022-01-31,hello_world
2022-01-31,hello_stackover
  • 导入后MySQL表中数据:
0000-00-00 00:00:00,hello_world
2022-01-31 00:00:00,hello_stackover

案例B:字符串列为首列

  • CSV文件前两行内容:
hello_world,2022-01-31
hello_stackover,2022-01-31
  • 导入后MySQL表中数据:
hello_world,2022-01-31 00:00:00
hello_stackover,2022-01-31 00:00:00

使用的SQL语句

LOAD DATA LOCAL
INFILE 'myfile.csv'
INTO TABLE mydatabase.`mytable`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
(my_date, any_string_column);

异常原因

最可能的原因是CSV文件首行开头存在UTF-8 BOM(字节顺序标记)。BOM是一种不可见的特殊字符(十六进制为EF BB BF),当它出现在日期列的开头时,会导致日期字符串变为\ufeff2022-01-31,MySQL无法识别这种不符合日期格式的内容,因此将其转换为无效的0000-00-00 00:00:00。

而当字符串列为首列时,BOM会被包含在字符串字段中,MySQL可以正常存储带特殊字符的字符串,不会影响后续日期列的解析,因此不会出现异常。

解决方法:用文本编辑器(如Notepad++)打开CSV文件,选择“编码”→“UTF-8无BOM格式”保存,或者用十六进制编辑器直接删除开头的BOM字符后重新导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:03:20