Navicat导出本身不导致科学计数法,根本原因是Excel双击打开CSV时自动识别长数字为数值并截断精度;最有效方案是在SQL中用CONCAT(id,'\t')强制Excel识别为文本。

Navicat 本身不负责“变成科学计数法”——它只是导出纯文本(CSV)或结构化文件(XLSX)。真正把数字转成 1.23E+17 的,是 Excel 打开 CSV 时的自动类型识别机制。只要字段内容看起来像长数字(比如 18 位身份证、19 位订单 ID),Excel 就会把它当数值处理,并在超过 15 位后直接截断精度、填 0。
Excel 双击打开 CSV 就会触发自动识别
这是最常被忽略的根源操作。Windows 上右键 →「打开方式」→「Excel」,或直接双击 CSV 文件,Excel 会跳过所有格式控制,直接调用内置解析器:逐列扫描内容,对连续数字串启用数值推断。一旦某列前几行全是长整数,后续全列就被标为 General 数值格式,科学计数法和末位归零就不可避免。
- 这个行为与 Navicat 导出设置无关,也跟 CSV 编码(UTF-8 / GBK)无关
- 即使你提前把 Excel 单元格设为「文本」再粘贴,对双击打开的 CSV 无效——格式设定发生在解析之后
- Mac 版 Excel 没有「从文本/CSV 导入向导」,双击打开 CSV 后基本无解,必须换工具(如 Numbers)或改用代码读取
CONCAT(id, '\t') 是最轻量有效的 SQL 层干预
在 Navicat 执行导出前,把目标字段用 CONCAT() 拼接一个制表符 \t,是最小侵入、最高兼容的修复方式。Excel 解析器遇到含控制字符的字段,会立即放弃数值猜测,强制归为文本。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
-
SELECT CONCAT(order_id, '\t') AS order_id FROM orders;—— 注意别漏掉AS别名,否则导出列名可能异常 - 不要用单引号
'前缀:虽然也能生效,但某些 Excel 版本或区域设置下会把引号一起显示出来 - 避免用空格或逗号替代
\t:空格可能被 trim,逗号会破坏 CSV 分隔逻辑 - 该方法对 CSV 和 XLSX 导出都有效,且不依赖 Navicat 版本或数据库类型(MySQL/PostgreSQL/Oracle 均适用)
用 Excel “数据导入向导”才能真正绕过自动识别
如果你无法修改 SQL(例如只读权限、视图封装、或导出脚本已固化),唯一补救路径就是放弃双击,走 Excel 内置的结构化导入流程。这个向导允许你在预览阶段手动锁定列类型。
- Excel 菜单栏 →「数据」→「从文本/CSV」→ 选中文件 → 进入预览界面
- 点击问题列(如
id_card_number)顶部下拉箭头 → 选「文本」→「加载」 - 导入后该列左上角会出现绿色三角标记,表示 Excel 已按文本存储,双击单元格可见完整原始字符串
- ⚠️ 此流程仅对
.csv文件有效;直接导出的.xlsx文件不支持该向导,也无法事后修正已损坏的数值列
真正麻烦的不是怎么修,而是很多人直到核对数据时才发现最后几位是 0——而这时 Excel 已经永久丢弃了原始字节。所以关键动作永远在导出前:要么改 SQL 加 \t,要么坚持走导入向导,别给 Excel “自作聪明”的机会。

















