【发布时间】:2015-12-02 11:12:21
【问题描述】:
我有一个大的 .csv 文件,我想将它导入 MySQL 数据库。我想根据它的速度使用LOAD DATA INFILE语句。
字段由-|- 终止。行由|-- 终止。目前我正在使用以下语句:
LOAD DATA LOCAL INFILE 'C:\\test.csv' INTO TABLE mytable FIELDS TERMINATED BY '-|-' LINES TERMINATED BY '|--'
大多数行看起来像这样:(请注意,字符串不包含任何字符。)
goodstring-|--|-goodstring-|-goodstring-|-goodstring|--
goodstring-|--|-goodstring-|-goodstring-|-|--
goodstring-|-goodstring-|-goodstring-|-goodstring-|-|--
goodstring 是一个不包含- 作为字符的字符串。如您所见,第二列或最后一列可能为空。像上面这样的行不会引起任何问题。但是最后一列可能包含- 字符。可能有一行看起来像这样:
goodstring-|--|-goodstring-|-goodstring-|---|--
最后一列中的字符串-- 会导致问题。 MySQL 检测到六列而不是五列。它将单个- 字符插入第五列并截断第六列。正确的数据库行应该是("goodstring", NULL, "goodstring", "goodstring", "--")。
一种解决方案是告诉 MySQL 将第四个字段终止后的所有内容都视为第五列的一部分(直到该行终止)。 LOAD DATA INFILE 可以做到这一点吗?是否有产生相同结果的方法,不需要编辑源文件并且执行速度与LOAD DATA INFILE 一样快?
【问题讨论】:
-
"是否可以告诉 MySQL 将第四个字段之后的所有内容都视为第五列?"是的,按照
SET fifthColumn=CONCAT(@fifthField,@sixthField)每this blog post 的行。 -
我们通常使用
FIELDS TERMINATED BY '¿^?fish╔&®)' -
谢谢@bishop!那篇博文正是我所需要的。
标签: mysql sql database csv load-data-infile