SQL导出,MYSQL导入,换行符问题

时间:2018-09-26 07:21:02

标签: php mysql bash

我有一个很大的数据库,其中存储了不同的事件。现在,我正在编写一个新程序,必须将数据从SQL数据库迁移到MYSQL数据库。

因此,我必须对不同的字段进行一些修改。例如,将日期和时间字段设置为datetimefield。因此,我首先计划使用php脚本,该脚本可用于其他较小的数据表。但是在事件表中,我大约有200.000行,这导致使用PHP处理时超时。

所以我决定使用bash脚本来使其工作。我仍然是bash脚本的初学者,我尝试过此操作来读取文件:

#!/bin/bash
export IFS=","
filename=events.csv
cat $filename | while read -r id eventkind name oert_dst1 oert_dst2 oert_dst3 eins_dst forces creator createdat editor editat datefromdate datefromtime datetodate datatotime city street oert note referto state owner verband staat verkehr wasser history einsltr;
do echo $id;
done

它按预期方式工作,并且读取文件的内容。

但是:

在“注释”字段中包含换行符的内容。脚本的结果是:

"VKA_ID"
134301
134306
Veranstalter: Stadt Fürstenfeldbruck"
134307

带有“ Veranstalter ....”的行是来自“ note”字段的内容。如果我在编辑器中打开csv文件,则还会有换行符。

对于导出,我使用了SQL-Developer的GUI,但找不到任何功能来避免此换行符。

有人知道吗?

P.S我忘了说。 PHP正确解析。我将文件读入数组,并且还有换行符,但在数组字段中。换行检测在这里正常工作。可惜我不能用PHP来处理那个大文件...

1 个答案:

答案 0 :(得分:0)

  

但是在事件表中,我大约有200.000行,这导致使用PHP处理时超时。

您可以使用PHP,只需覆盖set-time-limit

set_time_limit(20);

或使用ini_set

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

这也可以在循环中完成,以“足够的时间”处理每个记录:

foreach ($rows as $row) {
    set_time_limit(2);///allows 2 seconds per row
    //process $row
}