0

まだExcelにあるcsvファイルからデータを読み込もうとしています。これまでのところ、これは私のSQLクエリとして持っているステートメントです:

LOAD DATA LOCAL INFILE 'C:\\Documents and Settings\\J03299\\Desktop\\TMETER.csv'
INTO TABLE edata
COLUMNS TERMINATED BY ',' ENCLOSED BY "" LINES TERMINATED BY '\n'
(Year,Month,Day,MJD,xpiles,xstacks,Utilites);

このファイルはTMETERと呼ばれ、7つの列があります。366行あります。最初の行と最初の4列(MJDまで)しか読み取ることができませんが、それ以降はすべてnullになります。次に、2番目の行で、行124のファイル(TMETER.csv)のすべての列をedataテーブルの2番目の行の最初の列に配置します。私は混乱しています

  1. なぜそれは列の山、スタック、ユーティリティからデータを読み取らないのですか?(csvファイルの列名は奇妙で私のedataテーブルと同じではないことに注意してください。たとえば、データベーステーブルではパイルですが、実際のcsvファイルではx(パイル)、テーブルではスタックですが、csvファイルではy(スタック)です。 .Mysqlでは、この形式でetable名を作成できないため、即興で作成する必要がありました。これが、csvファイルからmysqlのテーブルへの読み取りとマッピングが行われない理由でしょうか。
  2. 私のステートメントがcsvファイルの最初の行をmysqlテーブルの最初の行に配置しているのに、行124まですべてスキップしてから、csvファイルのすべての列をmysqlデータベーステーブルの最初の列に挿入するのはなぜですか?

申し訳ありませんが私の英語は上手ではありません。どんな援助も大歓迎です。

4

1 に答える 1

0

コマンドを実行すると、次のようなメッセージが表示されるはずRecords: 1 Deleted: 0 Skipped: 0 Warnings: 0です。警告がある場合は、入力SHOW WARNINGSしてその内容を確認します。

これは、行末が間違っている場合に時々発生する動作のように聞こえます。コード エディターでドキュメントを開き、行が実際に \n で終わっていることを確認してください。LINES TERMINATED BY '\r'それが不便な場合は、テーブルを削除してorで再インポートして、問題が解決するかどうかLINES TERMINATED BY '\r\n'を確認することもできます。

フィールド名について: このコマンドは、テキスト ファイル内のフィールド名を無視します。最初の列を括弧内の最初のフィールド (あなたの場合は Year) に一致させ、2 番目の列を括弧内の 2 番目のフィールド (Month) に一致させるだけです。ファイルの先頭にフィールド名がある場合は、フィールドのリストの括弧の直前に IGNORE 1 LINES を追加してスキップする必要があります。

于 2012-06-04T15:46:17.937 に答える