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

时间:2020-03-06 14:57:52  来源:igfitidea点击:

我需要将较大的(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会将一个以上空格的序列解释为界定一个空字段。

有任何想法吗?

解决方案

如果我们使用的是Unix / Linux,则可以通过sed进行设置。

打开一个终端并输入:

sed 's/ \+/ /g' thefile > thefile.new

这会将多个空格的所有序列替换为一个空格。

我们也可以使用Jauco发布的相同命令将定界符更改为';'。或者\ n。
那也有帮助。

没有办法可以务实地做到这一点吗?一个简单的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);
}

?>

编辑
话虽如此,贾卡勒的建议却整洁了;)