数据库导出身份证数据错误分析
背景
我们都有从数据库中导出数据到表格的需求,但是在一些比较长的纯数字型字符串数据的时候,导出数据会遇到问题,总是被excel识别为一个比较大的数,从而转换为科学计数法并截断的问题。
原因
问题的原因其实和数据库、csv格式文件没有关系,原因在于:Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学计数法表示,还会只保留高15位,其他位都变0。
解决方案及优缺点
下面的方法不管是什么数据库以及数据库客户端工具,应该都是有效的,因为始终是在解决excel的问题,而不是在解决数据库的问题或者客户端工具的问题,当然如果你使用的sql客户端工具给你提供了这个问题的解决方案,那自然再好不过,就不用使用下面的方法曲线救国了。
增加非数字不可见字符
该方法的切入点在于excel自动将导出的内容识别为一个很长的整数,为使excel将其识别为一个字符串,在原来数字内容的前或后加上一个非数字字符,但是为了让数据看起来还是原来的数据,所以加上的是不可见字符,通常加制表符\t
。
添加的时机和方法,通过sql筛选数据的时候加入,或者是在导出选项中通常有一个分隔符的设置,正常一般设置为,
,将其修改为\t,
。
该方法的优点就是简单快速,缺点就是表格的实际内容被修改,可能导致后续的匹配,以及对比等工作的潜在问题。
使用excel获取外部数据功能
该方法的切入点在于excel自动将导出的内容识别为一个很长的整数,为使excel将其识别为一个字符串,不让excel进行自动识别,而是手动的设置每一列的数据类型。使用excel的获取外部数据功能来指定每一列的数据类型。
总体思路如下:
数据库----导出----->csv-----获取外部数据---->excel
将长数字的列设置为文本格式,这样excel就不会自动识别为数字,而是我们设置的文本类型数据。
该方法的优点就是数据内容没有任何变化,后续的匹配,以及对比等工作不容易出问题。缺点就是会多一点点操作。总体来说这个方法是比较好的。