从 CSV 导入的数据被放入错误的 mysql 列

Posted

技术标签:

【中文标题】从 CSV 导入的数据被放入错误的 mysql 列【英文标题】:Imported data from CSV is put into wrong mysql column 【发布时间】:2012-05-20 13:49:14 【问题描述】:

我正在尝试使用 CSV 将 excel 文件导入我的 mysql 数据库。

数据库结构:

CREATE TABLE IF NOT EXISTS `sales_products` (
  `productID` int(11) NOT NULL auto_increment,
  `name` varchar(200) NOT NULL default '',
  `categoryID` int(11) NOT NULL default '0',
  `brandID` int(11) NOT NULL default '0',
  `seriesID` int(11) NOT NULL,
  `info` text NOT NULL,
  `img` text NOT NULL,
  `date_added` date NOT NULL default '0000-00-00',
  `price` double NOT NULL default '0',
  `special` varchar(200) NOT NULL,
  PRIMARY KEY  (`productID`),
  FULLTEXT KEY `name` (`name`,`info`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='All products' AUTO_INCREMENT=21341 ;

CSV 的第一行:

Bottle opener (No.:015005);1;1;0;Blue, metallic;801001.gif;12-05-2012;0.95

我使用“使用 LOAD DATA 导入 CSV”,包含以下列:名称、类别 ID、品牌 ID、系列 ID、信息、img、添加日期、价格、特殊

它运行没有错误,但信息字段留空,信息放入“img”字段,img 放入 date_add 等。所以它跳过了信息字段。这是为什么呢?

【问题讨论】:

因为里面有逗号?您需要告诉 mysql 逗号不是字段分隔符,或者在将 excel 导出为 csv 时在字符串周围使用引号分隔符。例如“蓝色,金属” 导入的默认值有一个分号作为字段分隔符。为什么它会认为 a 是字段分隔符?此外,这会将“蓝色”放在 info 字段中,将“metallic”放在 img 字段中,所以这不会是问题所在。 不确定,但即使您指定了另一个分隔符,也将 , 视为分隔符是一个反复出现的主题。你试过引用吗? 用引号 (") 将所有主菜括起来就行了。不过对我来说仍然像是一个 phpMyAdmin 错误。我使用这个 VB 脚本导出所有内容:markinns.com/articles/full/export_excel_csvs_with_double_quotes 这些年来,我看到不少“完全可配置”的 csv 导入实用程序并不完全像宣传的那样工作,因此出现错误也就不足为奇了。 【参考方案1】:

我发现如果您将文件保存为制表符分隔的文本(这是假设您可以使用电子表格程序对其进行修改),这可以避免错误识别逗号的问题。

【讨论】:

以上是关于从 CSV 导入的数据被放入错误的 mysql 列的主要内容,如果未能解决你的问题,请参考以下文章

csv导入错误的Mysql排序规则/类型第1362行的CSV输入中的列计数无效

使用 Python 将特定列数据从 CSV 导入不同的 MYSQL 表

MySQL Workbench 数据导入向导未显示 CSV 中的所有列

错误 #1054 - 尝试将 CSV 文件导入数据库时​​,字段列表中出现未知列

如何将 csv 中的纬度和经度数据导入 MySQL 中的点数据类型列

无法使用 phpmyadmin 向导将 csv 导入 mysql 数据库