Navicat 导入时毫秒被截断,需在字段映射中手动设置日期格式为 yyyy-MM-dd HH:mm:ss.SSS,并确保目标字段支持毫秒精度(如 MySQL 的 DATETIME(3)),同时排除 CSV 中的 BOM 或隐藏字符干扰。

Navicat 导入时毫秒被截断,是因为没指定日期格式模板
Navicat 不会自动识别 2026-09-07 14:16:22.123 这类含毫秒的字符串,它默认只按 yyyy-MM-dd HH:mm:ss 解析,小数点后三位直接丢弃。这不是数据损坏,而是导入规则没对上——你必须在字段映射环节手动告诉它:“这个列是带毫秒的”。
操作路径:导入向导 → 第 3 步「字段映射」→ 找到对应日期列 → 点右侧 … → 弹出「日期时间格式」对话框 → 输入:yyyy-MM-dd HH:mm:ss.SSS
注意大小写:yyyy、dd 小写,HH 大写(24 小时制),SSS 是毫秒占位符(不是 fff 或 SS)。
- 如果源 CSV 是 Windows 记事本保存的,可能含 BOM 或零宽空格,导致格式匹配失败;建议用 VS Code 或 Notepad++ 以 UTF-8 无 BOM 重新保存
- Excel 导出的 CSV 若显示为
2026/9/7 14:16,说明已被转成本地化格式,不是原始文本,需在 Excel 中先设单元格为「文本」再复制粘贴,或改用「另存为 → CSV UTF-8」
目标字段类型不支持毫秒,Navicat 再准也没用
即使你填对了 yyyy-MM-dd HH:mm:ss.SSS,如果数据库字段定义是 DATETIME(无精度)或 TIMESTAMP(无括号数字),MySQL 会静默截断毫秒部分。PostgreSQL 和 SQL Server 同理,只是语法不同。
检查方式:SHOW CREATE TABLE your_table;,看该字段定义是否含精度,例如:
- MySQL:必须是
DATETIME(3)或TIMESTAMP(3)(3 表示最多三位毫秒) - PostgreSQL:
TIMESTAMP WITH TIME ZONE或TIMESTAMP WITHOUT TIME ZONE原生支持微秒,无需额外声明精度 - SQL Server:必须用
datetime2(3),datetime类型最大只到 3.33ms 且不推荐
修正语句示例(MySQL):ALTER TABLE your_table MODIFY COLUMN created_at DATETIME(3);
执行前确认该字段无严格 NOT NULL + 无默认值冲突,否则 MODIFY 可能报错。
CSV 隐藏字符干扰解析,格式正确也报“日期格式错误”
常见于从 Excel 或网页复制粘贴生成的 CSV:表面看着是 "2026-09-07 14:16:22.123",实际开头藏了 BOM(EF BB BF),或末尾混入全角空格、\u200b 零宽字符、甚至换行符。Navicat 解析器一碰到这些就判定整列格式非法。
快速排查法:
- 用
xxd或 VS Code 的「显示不可见字符」功能打开 CSV,搜U+FEFF、U+200B - 用命令行过滤:
cat data.csv | tr -d '\r' | sed 's/[[:space:]]*$//' > clean.csv - Navicat 导入时临时勾选「忽略首行」和「使用引号包围字段」,可绕过部分 BOM 干扰(但非根治)
真正干净的做法:用 Python 脚本预处理,或导出时选「CSV UTF-8 (Comma delimited)」而非「CSV (Comma delimited)」。
跨库迁移时时间精度丢失,常被当成 Navicat 问题
比如从 MySQL 5.7 迁到 8.0,Navicat 「数据传输」默认不校验字段精度,若源表是 DATETIME(3),目标建表语句可能被降级成 DATETIME,毫秒就没了。这不是导入问题,是结构同步漏掉了精度声明。
关键动作:
- 迁移前,在 Navicat 「数据传输」→「高级」选项卡中,务必勾选「保持精度」(如存在)或「导出完整 DDL」
- 迁移后立刻执行:
SELECT column_name, column_type FROM information_schema.COLUMNS WHERE table_name = 'your_table' AND data_type IN ('datetime', 'timestamp');,逐个核对column_type是否含(3) - 若已传完,别重跑整个任务,直接对目标库执行
ALTER TABLE ... MODIFY COLUMN ... DATETIME(3)补精度,再用 Navicat 单独重导该列数据
最易被忽略的一点:Navicat 的「结构同步」和「数据传输」对精度的处理逻辑不一致——前者更保守,后者更激进,默认可能丢精度。需要根据场景切换工具,不能只依赖一个功能。


















