为什么导入的数据在mysql中搞砸了?

时间:2014-04-10 16:55:53

标签: mysql excel csv import

我有很多脚本从excel或csv导入数据。 99%的人都没事。

我有一个特定的字段 - 关键字 - 在导入时搞砸了。

示例:

我输入的字段 - >

  

Accelus,GRC,监管情报,政策管理,关系   风险,培训,审计,风险管理,合规管理,Accelus   合规经理,ACM,Accelus风险经理,ARM,政策经理,   世界检查,国家检查,IntegraScreen,审计   管理器,AutoAudit,电子学习,GRC00971

我得到的是什么 -

  

Accelus,GRC,监管情报,政策管理,关系   风险,培训,审计,风险管理,合规管理,Accelus   合规经理,ACM,Accelus风险经理,ARM,政策经理,   World-Check,Country-Check,IntegraScreen,Au盻Ỵ盼

MySQL表是InnoDB / UTF8。我曾尝试将varchar和text用于字段,但结果完全相同。该文件是从服务器生成的,该服务器的数据库是UTF8(据称)。任何建议 - 这发生在很多行,并在我们的报告网站上终止最终用户的导出和查找脚本。

更新:我将这些字符放入谷歌并且它们是日语(如果我错了,请更正我)。所以我想,让我们打开excel,看看会发生什么。那么数据看起来很正常,但是当我将列格式更改为' text'在Excel中我只看到#####################作为坏行(仅适用于该列) - 注意7500中只有少数几个。所有这些行之前和之后的数据以及" bad"的其余部分排是很好的。这只是一栏。所以我想我正在处理一个编码问题,但字母看起来很正常。

2 个答案:

答案 0 :(得分:1)

在Excel中,您无法将csv文件另存为utf-8 。它使用ANSI编码CSV文件。

您可以执行以下操作:

  

1)选择“另存为”
   2)在“保存类型:”字段中,选择“Unicode   文字“。你将获得一个Unicode文件。(UCS-2 Little Endian)
   3)使用Notepad ++,编码菜单/转换为没有BOM的UTF-8。

另一种方法是在实际csv转换之前将xslx转换为xls

只有从xlsx格式保存为csv格式时,才会出现丢失的字符/截断问题。尝试先将xlsx文件保存到xls,然后再保存到csv。生成的csv仍然不是utf-8编码的,但可以使用文本编辑器(如notepad ++)轻松转换。

Link to Excel Specifications

答案 1 :(得分:0)

尝试使用

在PHP中设置编码
   header('Content-Type: text/html; charset=UTF-8');

在文件顶部