Php 如何将big.txt文件传输到MySQL?

Php 如何将big.txt文件传输到MySQL?,php,mysql,Php,Mysql,我有一个非常大的.txt文件,包含数百万个字符串,它有分隔符号 那么,将所有这些字符串传输到数据库的最简单方法是什么?是PHP fopen,用explode将每个字符串插入数据库吗 文件为2 GB。用于为您生成命令,即: LOAD DATA LOCAL INFILE 'input_file' INTO TABLE `tablename` FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' 引自 另一种解决方案,但日本银行的解决方案比这更好。这取决

我有一个非常大的.txt文件,包含数百万个字符串,它有分隔符号

那么,将所有这些字符串传输到数据库的最简单方法是什么?是PHP fopen,用explode将每个字符串插入数据库吗

文件为2 GB。用于为您生成命令,即:

LOAD DATA LOCAL INFILE 'input_file' INTO TABLE `tablename` FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
引自


另一种解决方案,但日本银行的解决方案比这更好。

这取决于机器上有多少可用内存。若您不受RAM大小的限制,那个么您可以尝试读取整个文件,将其分解为数组并一次性生成insert查询

由于数据库的限制,您可能需要生成多个insert查询(例如mySQL中的
max\u allowed\u packet

如果没有足够的可用内存,则需要以更多的步骤(按字节块)读取文件。您可以在生成一些多个insert查询之后执行此操作


函数可能会有所帮助。

您是否可以搜索/替换文件(使用
sed
awk
perl
)到SQL脚本中?您可以查看是否可以使用PHPMyAdmin导入该文件。如果没有,您可以使用PHP创建一个可以导入的文件。这可能比一个记录一个记录地导入要好。
$mysql = mysql_connect("localhost", "user", "password");
mysql_select_db("database", $mysql);
$filename = "file.txt";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
$array = explode('[separator]', $contents);

foreach ($array as $line)
{
    mysql_query("INSERT INTO table VALUES (".mysql_real_escape_string($line).")", $mysql);
}
mysql_close($mysql);