2011-07-31 15 views
4

私は数百万の文字列の非常に大きな.txtファイルを持っていて、それは分離記号を持っています。大きな.txtファイルをMySQLに転送するには?

だから、すべての文字列をデータベースに転送する最も簡単な方法は何ですか?それはPHPのfopenと爆発し、データベースに挿入すると、すべての文字列を取っている?

ファイルは2 GBです。

+0

右の音。 –

+1

ファイルを 'sed'や' awk'や 'perl'を使ってSQLスクリプトに検索/置換できますか? –

+0

PHPMyAdminを使用してインポートできるかどうかを確認できます。そうでない場合は、PHPを使用してインポートできるファイルを作成することができます。それはレコードだけでレコードをインポートするよりもうまくいくかもしれません。 – GolezTrol

答えて

1
$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); 

より引用

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

が、日銀のソリューションは、これよりも優れています。

0

マシンによって使用可能なメモリ容量によって異なります。 RAMのサイズに制限されていない場合は、ファイル全体を読み込み、配列に分解して、一度に挿入クエリを生成してみてください。あなたは十分なメモリを持っていない場合は

あなたはおそらく、あなたがの塊で(それ以上のステップでファイルを読み込む必要がありますので、DBの制限の複数のINSERTクエリ(MySQLで例えばmax_allowed_packet

を生成する必要がありますバイト)。いくつかの複数の挿入クエリを生成することができます。

fopenおよびfread機能が役立つ可能性があります。

関連する問題