从 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 文件导入数据库时,字段列表中出现未知列