sql导出,mysql导入,换行问题

qybjjes1  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(291)

我有一个很大的数据库,里面存储了不同的事件。现在我正在编写一个新程序,我必须将数据从sql数据库迁移到mysql数据库。
因此,我必须对不同的字段做一些修改。例如,将日期和时间字段设置为日期时间字段。因此,我首先计划使用一个php脚本,它适用于其他较小的数据表。但是在events表中,我有大约200000行,这会导致处理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

它按预期工作并读取文件的内容。
但是:
在“note”字段中,有一个换行字符进入的内容。脚本的结果是:

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

带有“veranstalter…”的行是“note”字段中的内容。如果我在编辑器中打开csv文件,还有linebreak。
对于导出,我使用了sqldeveloper提供的gui,我没有找到任何函数来避免这个换行符。
有人有主意吗?
p、 我忘了说。php解析正确。我将文件读入一个数组,还有linebreak,但在数组字段中。新线检测在那里正常工作。很遗憾我不能用php来处理那个大文件。。。

6ju8rftf

6ju8rftf1#

但是在events表中,我有大约200000行,这会导致处理php时超时。
您可以使用php,只需覆盖设置的时间限制:

set_time_limit(20);

或设置ini\ U时:

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
}

相关问题