Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将包含反斜杠的csv文件导入MySQL_Mysql_Csv_Escaping_Backslash - Fatal编程技术网

如何将包含反斜杠的csv文件导入MySQL

如何将包含反斜杠的csv文件导入MySQL,mysql,csv,escaping,backslash,Mysql,Csv,Escaping,Backslash,我正在尝试将一个包含27797行的大型csv文件导入MySQL。这是我的密码: 将数据本地填充“foo.csv”加载到以“,”结尾的表格栏字段中,“\n”结尾的行忽略1行; 它工作正常。但是,此文件的某些行包含反斜杠(\),例如: "40395383771234304","40393156566585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站","@woiu 太好了" "40395151830421504",

我正在尝试将一个包含27797行的大型csv文件导入MySQL。这是我的密码:

将数据本地填充“foo.csv”加载到以“,”结尾的表格栏字段中,“\n”结尾的行忽略1行;

它工作正常。但是,此文件的某些行包含反斜杠(
\
),例如:

"40395383771234304","40393156566585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站","@woiu 太好了" "40395151830421504","40392270645563392","23063222","","","2011-02-23 12:58:49 +0000","引力波宇宙广播系统零号控制站","@wx0 确切地讲安全电压是\""不高于36V\""而不是\""36V\"", 呵呵. 话说要如何才能测它的电压呢?" "40391869477158912","40390512645124096","23063222","","","2011-02-23 12:45:46 +0000","引力波宇宙广播系统零号控制站","@wx0 这是别人的测量结果, 我没验证过. 不过麻麻的感觉的确是存在的, 而且用适配器充电时麻感比用电脑的前置USB接口充电高" "15637769883","15637418359","35192559","","","2010-06-07 15:44:15 +0000","强互作用力宇宙探测器","@Hc95 那就不是DOS程序啦,只是个命令行程序,就像Android里的adb.exe。$ adb push d:\hc95.tar.gz /tmp/ $ adb pull /system/hc95/eyes d:\re\"
`String me= "LOAD DATA LOCAL INFILE 'X:/access.log/' REPLACE INTO TABLE `logrecords"+"`\n"+
"FIELDS TERMINATED BY \'|\'\n"+
"ENCLOSED BY \'\"\'\n"+
     "ESCAPED BY \'\\\\\'\n"+
     "LINES TERMINATED BY \'\\r\\n\'(\n"+
     "`startDate` ,\n"+
     "`IP` ,\n"+
     "`request` ,\n"+
     "`threshold` ,\n"+
     "`useragent`\n"+
     ")";
    System.out.println("" +me);
"40395383771234304","40393156566585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站“,”@woiu太好了" "40395151830421504","40392270645563392","23063222","","","2011-02-23 12:58:49 +0000","引力波宇宙广播系统零号控制站“,”@wx0确切地讲安全电压是\""不高于36V \“而不是\“36V\”,呵呵. 话说要如何才能测它的电压呢?" "40391869477158912","40390512645124096","23063222","","","2011-02-23 12:45:46 +0000","引力波宇宙广播系统零号控制站“,”@wx0这是别人的测量结果, 我没验证过. 不过麻麻的感觉的确是存在的, 而且用适配器充电时麻感比用电脑的前置通用串口总线接口充电高" "15637769883","15637418359","35192559","","","2010-06-07 15:44:15 +0000","强互作用力宇宙探测器“,”@Hc95那就不是磁盘操作系统程序啦,只是个命令行程序,就像安卓里的adb.exe.$adb push d:\hc95.tar.gz/tmp/$adb pull/system/hc95/eyes d:\re\” 导入后,带有反斜杠的行将被打断


我应该如何修改它?我应该使用<代码> SED还是<代码> AWK<代码>来代替所有的<代码> \>代码> <代码> \代码>(27797行以内…)?或者这可以通过修改SQL查询来修复?

< P>这是一个比直接回答更多的讨论。在最后数据中的值中间需要双引号吗?(在数据库中)?您有大量数据要处理这一事实根本不存在任何问题

“”是Oracle对字符串中的引号所做的事情。我认为构建该文件的任何内容都试图转义引号序列。这是MySQL的字符串手册。其中任何一个都是有效的::

select "hel""lo", "\"hello";
我倾向于在导入时单独进行编辑,以便更容易/更快地查看工作是否正常。如果您的文本文件小于10MB,则通过
sed
更新不会超过一分钟

sed -e 's/\\//' foo.csv
从您的评论中,您可以将转义字符设置为“\”以外的内容。

ESCAPED BY 'char'

这意味着加载程序应该逐字添加值在插入数据之前,这将阻止任何工具破坏UTf8序列。

在类似情况下,我所做的是首先在测试应用程序中创建java字符串。然后编译测试类并修复我发现的任何错误

例如:

"40395383771234304","40393156566585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站","@woiu 太好了" "40395151830421504","40392270645563392","23063222","","","2011-02-23 12:58:49 +0000","引力波宇宙广播系统零号控制站","@wx0 确切地讲安全电压是\""不高于36V\""而不是\""36V\"", 呵呵. 话说要如何才能测它的电压呢?" "40391869477158912","40390512645124096","23063222","","","2011-02-23 12:45:46 +0000","引力波宇宙广播系统零号控制站","@wx0 这是别人的测量结果, 我没验证过. 不过麻麻的感觉的确是存在的, 而且用适配器充电时麻感比用电脑的前置USB接口充电高" "15637769883","15637418359","35192559","","","2010-06-07 15:44:15 +0000","强互作用力宇宙探测器","@Hc95 那就不是DOS程序啦,只是个命令行程序,就像Android里的adb.exe。$ adb push d:\hc95.tar.gz /tmp/ $ adb pull /system/hc95/eyes d:\re\"
`String me= "LOAD DATA LOCAL INFILE 'X:/access.log/' REPLACE INTO TABLE `logrecords"+"`\n"+
"FIELDS TERMINATED BY \'|\'\n"+
"ENCLOSED BY \'\"\'\n"+
     "ESCAPED BY \'\\\\\'\n"+
     "LINES TERMINATED BY \'\\r\\n\'(\n"+
     "`startDate` ,\n"+
     "`IP` ,\n"+
     "`request` ,\n"+
     "`threshold` ,\n"+
     "`useragent`\n"+
     ")";
    System.out.println("" +me);

在此处输入代码

谢谢Owen。实际上,此csv文件是由Twitter的官方档案导出工具生成的。这是原始推文:(示例的第二行)。我应该如何保持此推文在MySQL数据库中的状态?下面是另一个示例:此推文中的反斜杠在导入过程中中断。您想要“\”“'在db中?'原始文本是tweet,id est”\36V“\和d:\re.MySQL think\r是EOL。