如何将一个以空格分隔的文本文件导入到MySQL中?

5

我需要将大型(24MB)文本文件导入到MySQL表中。每一行看起来像这样:

1 1 0.008  0  0  0  0  0                                    

每个字段之间都有一个或多个空格,而最后一个字段在换行符前面大约有36个空格。
如何将这样的文件导入MySQL?从文档中看来,LOAD DATA命令期望所有字段以相同的字符串为终止符。我已经尝试过:
LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' ';

但是MySQL会将超过一个空格的序列解释为分隔符,表示为空字段。

有什么想法吗?

4个回答

10
如果您使用的是Unix/Linux系统,则可以使用sed命令进行处理。
打开终端并输入:
sed 's/ \+/ /g' thefile > thefile.new

这将用一个空格替换所有连续的多个空格序列。


2

如果您使用的是Windows系统,可以直接使用Excel。

Excel可以导入以空格分隔的文件(在导入菜单中勾选“将后续分隔符视为一个”选项)。

然后,您只需从Excel将文件另存为CSV格式,并使用以下命令将其导入到MySQL中:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 

0

你也可以使用Jauco发布的相同命令将分隔符更改为“;”或“\n”。这也会有所帮助。


不完全是;MySQL使用空格作为字段分隔符时很顺畅,只有多个空格才会成为问题。而且使用换行符会使情况更糟,因为它们将与记录分隔符相同! - Mark Baker

0

你没有办法以实用的方式完成这个任务吗?一个简单的PHP脚本可以轻松地加载文件,按空格分割并快速插入:

<?php

$db = mysql_connect('host', 'user', 'password')
or die('Failed to connect');
mysql_select_db('database', $db);

$fileHandle= @fopen("import.file", "r");
if ($fileHandle) {
    while (!feof($fileHandle)) {
        $rawLine = fgets($fileHandle, 4096);

        $columns = preg_split("/\s+/", $rawLine);

        //Construct and run an INSERT statement here ...   

    }
    fclose($fileHandle);
}

?>

编辑 话虽如此,Jakal的建议更加简洁 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接