343

正規化されていないイベントがあります。MySQLテーブルにロードしようとしているクライアントからの日記CSVで、正常な形式にリファクタリングできます。CSVファイルの列ごとに1つのフィールドを持つ「CSVImport」というテーブルを作成しました。CSVには99列が含まれているため、これ自体は十分に困難な作業でした。

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

テーブルに制約はなく、すべてのフィールドはVARCHAR(256)値を保持します。ただし、カウント(INTで表される)、yes / no(BITで表される)、価格(DECIMALで表される)、およびテキストの宣伝文句( TEXTで表されます)。

ファイルにデータをロードしようとしました:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

テーブル全体がでいっぱいNULLです。

問題は、テキストの宣伝文句に複数の行が含まれていて、MySQLが新しい各行が1つのdatabazse行に対応するかのようにファイルを解析していることだと思います。ファイルをOpenOfficeに問題なくロードできます。

clientdata.csvファイルには、2593行と570レコードが含まれています。最初の行には列名が含まれています。カンマで区切られていると思いますが、テキストは明らかに二重引用符で区切られています。

アップデート:

疑問がある場合は、マニュアルを読んでください:http: //dev.mysql.com/doc/refman/5.0/en/load-data.html

LOAD DATAOpenOfficeは推測できるほど賢いという情報をステートメントに追加しました。これで、正しい数のレコードが読み込まれます。

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

NULLしかし、それでも完全なレコードはたくさんあり、ロードされたデータはどれも適切な場所にないようです。

4

20 に答える 20

146

問題の核心は、CSV ファイルの列をテーブルの列と一致させているようです。

多くのグラフィカルな MySQL クライアントには、この種のことを行うための非常に優れたインポート ダイアログがあります。

この仕事で私のお気に入りは、Windows ベースのHeidiSQLです。LOAD DATAコマンドをビルドするためのグラフィカル インターフェイスが提供されます。後でプログラムで再利用できます。

テキストファイルのインポート

スクリーンショット: [テキストファイルのインポート] ダイアログ

[テキスト ファイルのインポート] ダイアログを開くには、次の手順を実行しTools > Import CSV fileます。

ここに画像の説明を入力

于 2010-09-03T11:35:54.497 に答える
92

200行以上をインポートした最も簡単な方法は、phpmyadmin sqlウィンドウのコマンドの下にあります

私は2つの列CountryId、CountryNameを持つ国の単純なテーブルを持っています

ここに.csvデータがありますCSVファイル

コマンドは次のとおりです。

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

2 番目の列に が表示されないように注意してください。そうしないと、インポートが停止します

于 2014-06-11T18:37:03.307 に答える
13

これは、LOAD DATA ステートメントで列をリストすることで修正できます。マニュアルから:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

...そのため、csv ファイルに表示される順序で 99 列をリストする必要があります。

于 2014-12-29T21:38:26.183 に答える
7

mysql コマンド ラインは、インポート時に非常に多くの問題を起こしがちです。方法は次のとおりです。

  • Excel を使用してヘッダー名を編集し、スペースを含めないようにします。
  • .csv として保存
  • 無料の Navicat Lite Sql Browser を使用して、新しいテーブルをインポートして自動作成します (名前を付けます)
  • 新しいテーブルを開く ID のプライマリ自動採番列を挿入する
  • 必要に応じて列のタイプを変更します。
  • 終わり!
于 2012-09-25T00:53:44.187 に答える
3

csv ファイルを SQL テーブルにインポートする方法

サンプルファイル:Overseas_trade_indexデータCSVファイル

手順:

  1. のテーブルを作成する必要がありますoverseas_trade_index

  2. csv ファイルに関連する列を作成する必要があります。

    SQL クエリ:

    ( id int not null primary key auto_increment,
    series_reference varchar (60),
    period varchar (60),
    data_value decimal(60,0),
    status varchar (60),
    units varchar (60),
    magnitude int(60),
    subject text(60),
    group text(60),
    series_title_1 varchar (60),
    series_title_2 varchar (60),
    series_title_3 varchar (60),
    series_title_4 varchar (60),
    series_title_5 varchar (60),
     );
    
  3. ターミナルでmysqlデータベースに接続する必要があります。

    =>show databases;
    =>use database;
    =>show tables;
    
  4. csv データを mysql テーブルにインポートするには、このコマンドを入力してください。

    load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
    
  5. sqldatabase で次の海外貿易指数データを検索します。

    select * from trade_index;
    
于 2019-05-27T12:08:38.013 に答える
2

Excel スプレッドシートがロードされた Windows マシンを使用している場合、Excel への新しい mySql プラグインは驚異的です。オラクルの人々は、そのソフトウェアで本当に素晴らしい仕事をしました。Excel から直接データベース接続を行うことができます。そのプラグインはデータを分析し、データと一致する形式でテーブルを設定します。変換するデータの巨大な大きな csv ファイルがいくつかありました。このツールは時間を大幅に節約しました。

http://dev.mysql.com/downloads/windows/excel/

データベースにオンラインで入力する Excel 内から更新を行うことができます。これは、超低価格の GoDaddy 共有ホスティングで作成された mySql ファイルで非常にうまく機能しました。(GoDaddy でテーブルを作成するときは、データベースのオフサイト アクセスを有効にするために、標準外の設定を選択する必要があることに注意してください...)

このプラグインを使用すると、XL スプレッドシートとオンラインの mySql データ ストレージの間で純粋な双方向性を実現できます。

于 2014-12-23T09:00:16.317 に答える
1

csvファイルをmysqlデータベースにインポートするためのPHPクエリ

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

**サンプルCSVファイルデータ**

name,mobile,email
Christopher Gritton,570-686-3439,ChristopherKGritton@inbound.plus
Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus
Craig White,516-795-8065,CraigJWhite@inbound.plus
David Whitney,713-214-3966,DavidCWhitney@inbound.plus
于 2016-09-28T09:02:01.143 に答える
0

私の答えが遅れていることは知っていますが、それを行う他のいくつかの方法について言及したいと思います。最も簡単な方法は、コマンド ラインを使用することです。手順は次のとおりです。

  1. 次のコマンドを入力して、MySQL CLI にアクセスします。

mysql -u my_user_name -p

  1. データベースにテーブルを作成する
use new_schema;

CREATE TABLE employee_details (
id INTEGER,
employee_name VARCHAR(100),
employee_age INTEGER,
PRIMARY KEY (id)
);
  1. CSV ファイルをテーブルにインポートします。ファイル パスを指定するか、MySQL サーバーのデフォルト ディレクトリにファイルを保存します。
LOAD DATA INFILE 'Path to the exported csv file'
INTO TABLE employee_details
FIELDS TERMINATED BY ','
IGNORE 1 ROWS;

これは多くの解決策の中で唯一のものであり、このチュートリアルで見つけました 。CSV ファイルを MySQL データベースにロードすることが日常業務である場合は、このプロセスを自動化することをお勧めします。この場合、スケジュールに従ってデータをロードできるサードパーティ ツールを使用できます。

于 2021-11-10T16:20:03.933 に答える