Navicat 16导入CSV时日期列为空,主因是字段映射中日期掩码(如DMY/MDY/YMD)与源数据格式不匹配,且不报错;需在「字段映射」中手动设置正确掩码并验证示例,同时确保目标字段为DATE/DATETIME类型、CSV编码为UTF-8、数据格式统一。
Navicat 16导入CSV时日期列全为空,大概率是掩码没对上
navicat 不会自动猜你 csv 里的 05/12/2023 是“5月12日”还是“12月5日”,它只认你在「字段映射」里手动选的日期掩码。一旦选错(比如源数据是 dd/mm/yyyy,你却选了 mdy),整列直接变 null,不报错、不提示,安静地丢掉——这是最常被忽略的坑。
在「字段映射」界面手动设置日期掩码的具体操作
导入向导走到第二步「字段映射」后,别急着点下一步。找到你的日期列(比如 order_date),点击该列右侧的「…」按钮打开格式设置:
- 确认「日期格式」下拉框已展开,不要依赖默认值
- 根据 CSV 原始内容选对应掩码:
DMY(日/月/年)、MDY(月/日/年)、YMD(年/月/日)——注意大小写和顺序,YDM是无效选项 - 如果日期含时间,勾选「包含时间」,并检查时间分隔符是否匹配(如
HH:mm:ss对应14:30:22,不是2:30:22 PM) - 点击「示例」框,看右边实时渲染结果是否符合预期;若显示
Invalid date,说明掩码或原始数据格式不兼容
CSV里混着多种日期格式?掩码没法救,得预处理
Navicat 的日期掩码是全局单值设定,一列只能配一个格式。如果你的 created_at 列里同时存在 2023-05-12、12/05/2023、May 12, 2023,无论选哪个掩码都会崩。这时必须提前清洗:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 用
pandas.read_csv()加parse_dates参数统一转成datetime64,再导出为标准YYYY-MM-DD HH:MM:SS - 命令行可用
awk按列重排(如第4列为 DD/MM/YYYY):awk -F, -v OFS=, '{$4 = sprintf("%s-%s-%s", $4, $3, $2); print}' input.csv > clean.csv - 拒绝用 Excel 打开再另存——它会偷偷把日期转成序列号(如
43831),Navicat 读出来就是数字,不是日期
掩码设对了还是空?检查这三处硬性约束
即使掩码完全匹配,日期仍为空,问题往往出在数据库层或文件本身:
- 目标字段类型不是
DATE/DATETIME/TIMESTAMP,而是VARCHAR或TEXT——Navicat 不会强制转换,直接跳过 - CSV 中日期值为
NULL、\N、空字符串或非法值(如0000-00-00),而 MySQL 严格模式下拒收,Navicat 就静默填NULL - 文件编码不是 UTF-8:用记事本打开 → 另存为 → 编码选「UTF-8」,别用「UTF-8-BOM」,BOM 头会让第一列字段名识别错位,连带日期列偏移










