Navicat导出数据时Excel设文本格式无效,真正有效的是在SQL中为字段末尾添加制表符(如CONCAT(id_card, '\t')),强制Excel识别为文本,避免科学计数和精度丢失。
Navicat导出前,Excel单元格设为文本根本没用
这个操作只对「手动在excel里输入」有效,对navicat导出的文件完全不起作用。navicat生成的.xlsx或.csv文件,excel打开时会重新解析数据类型,你之前设好的“文本”格式会被忽略。哪怕你提前打开一个空excel、把a列全设成文本,再用navicat导出覆盖保存——导出后一打开,身份证号照样变1.23e+17。
真正起效的是在SQL查询里加\t制表符
这是目前最稳定、兼容性最好、且不依赖Excel版本的操作。原理很简单:Excel只要看到单元格内容里有非数字字符(比如\t),就不会把它当数值处理,自然跳过科学计数法和15位精度截断。
-
CONCAT(id_card, '\t')是通用写法,MySQL 5.7+ 和 MariaDB 都支持 - PostgreSQL 要用
id_card || E'\t',注意E''语法必须带 - SQL Server 用
id_card + CHAR(9),CHAR(9)就是制表符的ASCII码 - 别用空格或单引号替代——空格可能被Trim掉,单引号在某些Excel导入场景下反而触发异常解析
导出CSV再用Excel“数据导入向导”才是备选方案
如果你无法修改SQL(比如权限受限或用的是视图),导出为CSV后,**不能双击打开**,必须走Excel的导入流程:
- Excel → “数据”选项卡 → “从文本/CSV” → 选中文件
- 在预览界面,点击目标列(如
order_id)右侧下拉箭头 → 选文本 - 确认导入,此时该列会带绿色角标,表示Excel已按文本读取
- 注意:这个流程对
.xlsx导出文件无效,只对.csv生效
别信FORMAT()或CAST(... AS CHAR)能解决问题
这些函数确实能把数字转成字符串,但Excel在解析时仍可能根据内容“猜”类型。比如FORMAT(123456789012345678, '0')输出纯数字字符串,Excel看到一整列都是长数字,大概率还是当成数值处理。而\t是明确的“干扰字符”,Excel识别逻辑里对含控制字符的字段直接归为文本,没有二次猜测环节。
真正容易被忽略的点是:制表符必须出现在字段值末尾,且不能被SQL的TRIM或Navicat导出设置里的“去除空白”选项吃掉。导出前建议先在Navicat结果窗口里复制一格看看有没有看不见的缩进——有,就说明生效了。


















