navicat导入excel日期需在字段映射页启用自定义格式(如%y-%m-%d),且excel列必须为标准字符串而非序列值;混用格式、空值或不可见字符会导致invalid date format或零值,须前置清洗。

Navicat导入Excel时日期被识别为文本或报Invalid Date Format
Navicat不会自动推断Excel里日期字符串的格式,哪怕你看到的是2025-03-18或18/03/2025,它默认当作纯文本处理。错误提示Invalid Date Format的本质是解析失败,不是数据写错了。
必须在导入向导第三步「字段映射」页面操作:
点击右下角Options → 勾选Use custom date format → 在输入框填入对应格式,例如:%Y-%m-%d、%d/%m/%Y、%Y年%m月%d日
- Excel源列不能是Excel日期序列值(如底层是数字
45722),否则Navicat直接读到数字,根本不会走日期解析逻辑 - 解决办法:选中该列 → 右键「设置单元格格式」→ 改为「文本」→ 再用公式
=TEXT(A1,"yyyy-mm-dd")转成标准字符串;或复制粘贴进记事本再复制回来,强制剥离格式 - 全局首选项里的
Date Format只控制界面显示样式,对导入解析完全无效
导入后日期变成0000-00-00 00:00:00或1900-10-01
这是典型的时间解析失败后回退到MySQL默认零值的表现,根源仍是Navicat未成功将字符串转为合法日期值。
常见诱因包括:
- Excel中该列实际显示不全(如
2018/10/1 0:01:42只显示01:42.0),导致Navicat读取到截断或无效片段 - 列中混有空字符串
""或空白单元格,而目标字段定义为DATE NOT NULL,触发约束报错但错误信息仍显示为日期格式问题 - 部分单元格含不可见字符(如换行符、零宽空格),干扰格式匹配
实操建议:
诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿
- 导入前,在Excel中对该列统一设置单元格格式为「自定义」→
yyyy/m/d h:mm:ss,再保存文件 - 若已出现零值,不要直接改表结构重导,先用SQL查出异常行:
SELECT * FROM table_name WHERE date_col = '0000-00-00',定位原始Excel位置并清洗 - 避免依赖“跳过错误记录”来掩盖这类问题——空值或非法字符串属于约束层错误,不被该选项覆盖
一列混了多种日期格式(如2025-03-18和18-03-2025)
Navicat无法在单次导入中兼容多种格式。它只接受一个custom date format字符串,所有行都按同一规则解析。
强行导入会导致部分行解析失败,且错误日志不指明具体哪一行、哪种格式出问题。
- 必须前置清洗:用Excel公式或Python脚本统一转成一种标准格式,例如全部转为
YYYY-MM-DD - 可用Excel公式:
=IF(ISNUMBER(A1),TEXT(A1,"yyyy-mm-dd"),IF(LEN(A1)=10, A1, TEXT(DATEVALUE(A1),"yyyy-mm-dd")))(需根据实际格式微调) - 若数据量大,推荐用
pandas.read_excel()+pd.to_datetime(..., errors='coerce')清洗后再导出为干净.xlsx或.csv - 切勿尝试在Navicat中用
STR_TO_DATE()等MySQL函数——导入阶段不执行SQL,这些函数完全不生效
目标字段设为DATE但导入仍失败
仅把目标字段类型设为DATE或DATETIME远远不够。Navicat需要同时满足两个条件才能完成字符串→日期的转换:
- 在字段映射界面,拖拽Excel列到目标字段后,点击该映射项右侧的
→进入「数据类型转换」→ 类型选DATE - 下方
Use custom date format必须启用,且填写的格式字符串与Excel中实际内容严格一致 - 勾选「使用第一行作为字段名」,否则列顺序错位可能导致日期列被映射到非日期字段,引发隐性错误
- 若目标字段为
NOT NULL,Excel中该列存在空单元格(哪怕只是""),Navicat会尝试插入NULL并触发约束报错,错误信息仍显示为Invalid Date Format
最易被忽略的一点:日期列清洗和格式指定必须在导入动作发生前完成,没有“导入中动态修正”的余地。一旦开始导入,Navicat就只认你此刻指定的那一个格式字符串。










