2008年05月10日

[xserver][MySQL]csvファイルからのデータのインポート

xserverは共用サーバのため、サーバ上のデータをテーブルにLOADすることはできない。

このため、ローカルPCからインポートすることとなる。

なお、xserverはtelnet,SHが使えないので、シェルからのコマンドライン操作は不可能である。
従って、phpMyAdminを使うか、phpでプログラムを組んで実行することとなる。

■phpMyAdminを使う。(SQLコマンド)
"SQL"タブから下記コマンドを投入する。
LOAD DATA LOCAL INFILE "C:/temp/hoge.txt" INTO TABLE userID_dbName.tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;


"C:/temp/hoge.txt" は、
"C:\\temp\\hoge.txt"としても同じ。

入力ファイルが存在しているにも関わらず、「Not Found (Errcode 2)」エラーとなりLOADできない場合がある。

フィールド間の区切り文字指定として、"FIELDS TERMINATED BY ',' "は、入れたほうがよい。
指定がない場合、マルチバイト文字の部分が空白になることがある。


■phpMyAdminを使う。(インポート画面)
"インポート"タブから操作する。
インポートタブをクリックする前に、LOAD DATAするテーブルをクリックしないと、インポート可能なファイルにSQLのみ指定可能となるので注意。
・インポートするファイルの形式 : LOAD DATA する CSV
・LOAD DATA で CSV インポートするときのオプション : 入力ファイルに応じて設定する。
  行の終端記号は、windowsで作成したファイルは、"\r\n" を指定する。

・行の終端記号のエラーでLOADがうまくいかない場合、"auto"を指定する。
・データ量が多いときは、分割してLOADすること。


■プログラムを実行する。
<?php
$file = '"C:/temp/hoge.txt"';

//DB接続
$sv = "localhost";
$dbname = "userID_dbName";
$user = "userid";
$pass = "hogehoge";
$conn = mysql_connect($sv, $user, $pass) or die("コネクトエラー");
mysql_select_db($dbname) or die("DBセレクトエラー");

mysql_query("SET NAMES utf8");

//CSVデータの取り込み
$sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE userID_dbName.tableName";
$sql .= " LINES ";
$sql .= " TERMINATED BY '\r\n' ";
$sql .= " IGNORE 1 LINES";
$result = mysql_query($sql, $conn);

if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}

?>




参考:
MySQL 4.1 リファレンスマニュアル :: 6.4.8 LOAD DATA INFILE 構文

タグ:Xserver MySQL
posted by surviver at 23:37 | Comment(0) | TrackBack(0) | xserver
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。