【摘要】今天一个朋友遇到了这么一个问题,她的客服因为需要统计用户的相关信息,然后使用Navicat for MySQL将用户信息导出到csv文件中的时候,得到用户身份证号码这一字段却是用科学计数法表示出来的,本文讲讲如何解决这个问题。
起初,我也是不断的百度,希望能够使用csv解决这个问题,甚至是另存为xls打开,并将身份证这一列的格式设置成文本格式、自定义格式,但还是不行,最后我还是想了想希望通过写一个PHP小脚本解决这个问题。
朋友的数据库用户表很庞大大概有12万多条记录,本为了保护用户信息和方便讲解,就模拟一段数据表,如下图:(注意:身份证是18位,而csv或者xls会自动将其表示为数值型格式,并且后三位用'0'表示)
使用Navicate for MySQL工具导出的csv文件1.csv:
使用打开以后文件就是如上的图所示,身份证号码是使用科学计数法表示,但使用记事本、sublime、notepad++等等文本编辑器打开的时候可以看清身份证号码,如下图:
百度了一下,说只要在身份证前面加入一个引号"'"即可使其变成文本格式,于是乎,我尝试在sublimt打开后的csv文件中在身份证前加入一个单引号"'",如下图:1.csv
果不其然,我再次使用wps打开1.csv文件的时候,身份证号码是可以看见了,是文本格式的,但是问题来了,由于1.csv文件中有上10万条记录,根本无法通过我刚刚手动加入单引号的方式来完成这么大的数据修改。
于是乎,我写了一个PHP小脚本解决了这个问题,而且执行时间也就5秒钟,完整代码如下:
// 设置页面字符集
echo '<meta charset = "utf-8" />';
// 设置当前页面执行最大时间
ini_set("max_execution_time", 86400);
// 打开2.csv,若不存在则创建2.csv
$handle2 = fopen('2.csv', 'w');
$row = 0;
if (($handle = fopen("1.csv", "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",",'"')) !== FALSE)
{
// 把第四的字段,也就是身份证字段加入"' ... ",这样
$data[3] = "\"'".$data[3].'"';
// 去除第一行可能出现的问题
if($row == 0)
{
$data[0] = str_replace('"','',$data[0]);
$data[3] = str_replace("'",'',$data[3]);
}
fputcsv($handle2, $data,',',",");
}
fclose($handle);
}
上面的代码相信大家都能够看懂吧,唯一一点在于这里:fputcsv($handle2, $data,',',",")第四个参数设定字段字段环绕符,默认是双引号",而我们一定一定要把这个默认的双引号改了,也不能改成单引号,可以改成其它的,如逗号','。
这样,我就顺利的解决了一个难题,心里着实开心。
版权归 马富天博客 所有
本文标题:《PHP解决MySQL数据库导出到csv中身份证号码不能完全显示问题》
本文链接地址:http://www.mafutian.net/175.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0