根本原因是excel单元格格式为“文本”但内容是纯数字,navicat按数值类型解析时静默跳过而置空;常见于网页复制、csv导入后保存或手动加单引号等场景。
excel里看着是数字,navicat却读成空值
根本原因是excel单元格格式为“文本”,但内容恰好是纯数字(比如12345),而navicat默认按数值类型解析时会跳过这类“文本型数字”——它不报错,也不警告,直接当空处理。尤其常见于从网页复制、csv导入再保存为excel、或手动在单元格前加单引号('12345)的场景。
实操建议:
- 在Excel中选中问题列 → 右键「设置单元格格式」→ 改为「常规」或「数值」→ 按
F2回车强制重算(或用=VALUE(A1)批量转换) - 导入前,在Navicat「字段映射」步骤里,手动将该列为
TEXT或VARCHAR类型,而非INT或DECIMAL - 如果已导入为空,别急着重来:先查
SELECT * FROM your_table WHERE your_number_col IS NULL确认是否真为空,再针对性修复源文件
日期和科学计数法数字被识别失败
Excel把长数字(如身份证号、订单号)自动转成科学计数法(1.23E+17),或把日期存成序列值(如44562),Navicat无法自动还原,就会丢弃整列或填NULL。
实操建议:
- 身份证等长数字列:在Excel中全选 → 右键「设置单元格格式」→「文本」→ 再双击编辑框确认(防止前置零丢失)
- 日期列:避免用Excel的“短日期”格式;改用
YYYY-MM-DD纯文本,或在Navicat映射时指定目标字段为DATE并勾选「自动识别日期格式」 - 导入向导中点击「高级」→ 勾选「忽略科学计数法」(部分Navicat版本支持)
隐藏的不可见字符干扰数值识别
Excel单元格里混入了不可见字符(如CHAR(160)不间断空格、CHAR(13)回车、CHAR(9)制表符),Navicat解析时认为这不是合法数字,直接置空。
实操建议:
- 用Excel公式快速检测:
=LEN(A1)&" / "&LEN(TRIM(CLEAN(A1))),若两数不等,说明有隐藏字符 - 批量清理:用
=TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160)," ")))生成新列,再复制粘贴为值替换原列 - Navicat导入时,在「高级」选项里启用「去除首尾空格」和「忽略不可见字符」(如有)
字段长度或精度设置导致截断后变空
目标表字段定义为DECIMAL(5,2),但Excel里填了123456.789,Navicat因超长拒绝写入,又没开启错误中断,就静默跳过——结果就是该行对应字段为空。
实操建议:
- 导入前执行
DESCRIBE your_table_name,核对所有数值字段的TYPE和NULL属性 - 临时把目标字段扩大:比如
ALTER TABLE your_table MODIFY COLUMN amount DECIMAL(12,2) - 在Navicat「字段映射」界面,鼠标悬停在字段名上,看提示里是否显示「Precision overflow」类警告
真正麻烦的不是数字变空,而是它不报错、不提示、不中断——你得自己去查日志、比行数、验字段,才能发现某几列悄悄消失了。











