さくらインターネットのサーバーにおいて、

PHP my admin で テキストファイルをインポートしようとしたら、以下のエラーがでました。

-----------------------------------------------------------------------------------------------------
LOAD DATA LOCAL INFILE '/var/tmp/php---' INTO TABLE `filename` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' IGNORE 1 LINES

#2027 - Malformed packet
------------------------------------------------------------------------------------------------------

このエラーの意味をご存じのかた、いらっしゃいましたら 何卒よろしくお願い申し上げます。

( Malformed packet とは、どのようなことでしょうか。
Mal は「悪い」という意味の接頭辞だと高校の時に教わったのですが。。)

回答の条件
  • 1人2回まで
  • 登録:2009/04/26 02:46:02
  • 終了:2009/05/03 02:50:03

ベストアンサー

id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012009/04/26 14:42:59

ポイント10pt

前回質問でSJISに拘っておられたので

CSVファイルはEXCELなどWindows上で作成したものだと思います。


CSV は Comma-Separated Values の略なので本来はカンマで区切るものですが

タブで区切るものもCSVと呼ばれていたりしますので、ここでミスが生じます。

(b-wind 氏からのご指摘も、この点です。)


>Malformed packet

パケットのフォーマットがおかしい

  →送られてきたデータの形式がおかしい

SAKURAではエラーとして返してますが、

(試してはいませんが)Coreの方ではエラーを無視しているだけかもしれません。


ちなみに 内部で使われている LOAD DATA INFILE命令のデフォルト設定では

・タブで区切る

・改行コードはLF(WindowsはCRLF)

・' や " などで囲まない。

です。

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


私は phpMyAdmin で sjis 形式のファイルという組み合わせは扱ってないので

前回質問にも答えられず、今回も完全な解決策をお伝えすることは出来ませんが

問題点を明確にすれば回答が得られやすくなるのではないかと思って回答させていただきました。


# pahoo氏は前回(question:1240665487)もお答えのようですし

# それによって貴殿が行動しておられると思いますので

# id:pahoo氏 および id:hijk05氏からの回答に期待するしかないかもしれません。

# 前回質問もまだ受付中の模様ですから、各人への返答欄またはコメント欄に

# 今回質問のquestion:1240681560 を書き込んで補足説明願ってはどうでしょうか?


余談ですが PHP my admin ではなく phpMyAdmin です

最近の検索サイトではどちらでも調べられたりしますが、

正確なほうが、より情報を得られやすくなりますし、プログラムの世界では

大文字と小文字の違いも正確に示さないと動かない場合もあったりしますので

以後、ご留意を。

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/04/26 08:10:59

ポイント35pt

インポートするCSVの書式が間違っていると考えられます。


フィールド区切り文字がタブになっていませんか? カンマに直してください。

レコード区切り文字の改行が「CR+LF」( \r\n, Windowsで使われる改行コード)になっていませんか? Unixで標準の「LF」(\n)にしてください。⇒(参考)改行コード

id:makoto4649

御指導ありがとうございます。

試してみましたところ、うまくいきませんでした。

LOAD DATA LOCAL INFILE '/var/tmp/php----' INTO TABLE `filename` FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n' IGNORE 1 LINES

1) さくらでは、フィールドはきちんと" "で囲まないといけませんでしょうか?

(現時点で囲んでおりませんが、ローカルではインポートできました。)

2)さくらでは、フィールドのエスケープ記号もcsv中に盛り込む必要がありますでしょうか?

3)コアサーバーでは、インポートは正常終了しますが、テーブルは空のままです。

どうぞよろしくお願いいたします。

2009/04/26 11:21:36
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402009/04/26 10:58:55

ポイント35pt

なんかすごい的外れな回答がついてるな。


LOAD DATA INFILE 構文には、 FIELDS (カラム区切り文字)と LINES (行区切り文字)の2種類が設定出来る。

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

FIELDS 節を指定しない場合、デフォルトは次のように記述した場合と同じです。

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

LINES 節を指定しない場合、デフォルトは次のように記述した場合と同じです。

LINES TERMINATED BY '\n'

注意: Winodows では行終端記号として 2 文字を使用しているため、テキストファイルを Windows システムで生成した場合は、通常、上の記述を LINES TERMINATED BY '\r\n' に変更する必要があります。wordpad などの一部のプログラムでは、行終端記号として \r を使用できます。

読み取り対象行のすべてに存在するプリフィックスをスキップする

参照元にあるとおり、デフォルトはタブ区切り、LF のみで改行なのでそのフォーマットに沿っていない1行が無視されたというのが警告の内容。


ただ、それでなぜ #2027 が出るのかの関連性は分からないが…。

MySQL :: MySQL 5.1 リファレンスマニュアル :: B.3 Client Error Codes and Messages

一応クライアント側でのエラーコードのようなので今回の処理自体にはこのメッセージは関係ない物と思われる。

id:makoto4649

御指導ありがとうございます。

いただいた資料を熟読して勉強いたします。

2009/04/26 12:10:08
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012009/04/26 14:42:59ここでベストアンサー

ポイント10pt

前回質問でSJISに拘っておられたので

CSVファイルはEXCELなどWindows上で作成したものだと思います。


CSV は Comma-Separated Values の略なので本来はカンマで区切るものですが

タブで区切るものもCSVと呼ばれていたりしますので、ここでミスが生じます。

(b-wind 氏からのご指摘も、この点です。)


>Malformed packet

パケットのフォーマットがおかしい

  →送られてきたデータの形式がおかしい

SAKURAではエラーとして返してますが、

(試してはいませんが)Coreの方ではエラーを無視しているだけかもしれません。


ちなみに 内部で使われている LOAD DATA INFILE命令のデフォルト設定では

・タブで区切る

・改行コードはLF(WindowsはCRLF)

・' や " などで囲まない。

です。

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


私は phpMyAdmin で sjis 形式のファイルという組み合わせは扱ってないので

前回質問にも答えられず、今回も完全な解決策をお伝えすることは出来ませんが

問題点を明確にすれば回答が得られやすくなるのではないかと思って回答させていただきました。


# pahoo氏は前回(question:1240665487)もお答えのようですし

# それによって貴殿が行動しておられると思いますので

# id:pahoo氏 および id:hijk05氏からの回答に期待するしかないかもしれません。

# 前回質問もまだ受付中の模様ですから、各人への返答欄またはコメント欄に

# 今回質問のquestion:1240681560 を書き込んで補足説明願ってはどうでしょうか?


余談ですが PHP my admin ではなく phpMyAdmin です

最近の検索サイトではどちらでも調べられたりしますが、

正確なほうが、より情報を得られやすくなりますし、プログラムの世界では

大文字と小文字の違いも正確に示さないと動かない場合もあったりしますので

以後、ご留意を。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません