問題タブ [load-data-infile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - CSVファイルをMySQLテーブルにインポートするにはどうすればよいですか?
正規化されていないイベントがあります。MySQLテーブルにロードしようとしているクライアントからの日記CSVで、正常な形式にリファクタリングできます。CSVファイルの列ごとに1つのフィールドを持つ「CSVImport」というテーブルを作成しました。CSVには99列が含まれているため、これ自体は十分に困難な作業でした。
テーブルに制約はなく、すべてのフィールドはVARCHAR(256)値を保持します。ただし、カウント(INTで表される)、yes / no(BITで表される)、価格(DECIMALで表される)、およびテキストの宣伝文句( TEXTで表されます)。
ファイルにデータをロードしようとしました:
テーブル全体がでいっぱいNULL
です。
問題は、テキストの宣伝文句に複数の行が含まれていて、MySQLが新しい各行が1つのdatabazse行に対応するかのようにファイルを解析していることだと思います。ファイルをOpenOfficeに問題なくロードできます。
clientdata.csvファイルには、2593行と570レコードが含まれています。最初の行には列名が含まれています。カンマで区切られていると思いますが、テキストは明らかに二重引用符で区切られています。
アップデート:
疑問がある場合は、マニュアルを読んでください:http: //dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA
OpenOfficeは推測できるほど賢いという情報をステートメントに追加しました。これで、正しい数のレコードが読み込まれます。
NULL
しかし、それでも完全なレコードはたくさんあり、ロードされたデータはどれも適切な場所にないようです。
sql - mysql "datetime NOT NULL DEFAULT '1970-01-01'" は 0000-00-00 00:00:00 になります
として作成された列があります
ただし、保存された値の空白のエントリを持つ LOAD DATA コマンドを使用して CSV ファイルからデータをアップロードすると、date_start
0000-00-00 00:00:00 になりますか?
mysql - .cvs を MySQL db にインポートするときに、明らかな理由もなく一部のデータが変更されます。何か考えはありますか?
そのため、phpMyAdmin の LOAD DATA 経由で Import CVS を使用して、80000 行以上の .cvs ファイルを MySQL データベースにインポートしていますが、正常に動作しているようで、エラー メッセージはありません。
問題は、インポート後、行 24002 から始まるテーブルのすべての行がデータベース フィールドの 1 つに同じ番号を持ち、この番号がインポートした .cvs ファイルにも存在しないことです。
これを例にとります:
さまざまなことを試しましたが、何も役に立ちませんでした:
- 24003行目からインポートを開始
- .cvs ファイルから行 24001、24002 を削除する
- .cvs ファイルから最初の 24002 行を削除する
- LOAD DATA なしで .cvs ファイルをインポートする
これは、.cvs ファイルの行の例です。
関連する特殊文字はなく、az、AZ、および 0-9 のみです。
このエラーがどこから発生したのか、まったくわかりません。何かアイデアはありますか?
前もって感謝します
sql - コマンドラインを使用してExcelデータをmysqlテーブルにインポートする
mysqlテーブルにインポートするExcelファイルがたくさんあります。
Excelファイルを直接取得してテーブルに1つずつインポートするmysqlコマンド/手順はありますか?
または、いくつかの手順でこのタスクを実行するためのより簡単な方法はありますか?
mysql - MySQL LOAD DATA INFILE に必要なファイルとディレクトリの権限は何ですか?
を使用して MySQL にデータをロードしようとするスクリプトがありますLOAD DATA INFILE
。何らかの理由で、ファイルが/tmp
ディレクトリにある場合は機能しますが、ファイルが同じ権限を持つ別のディレクトリにある場合は機能しません。MySQL にディレクトリまたはデータベース ディレクトリの外部からデータをインポートさせる方法が見つかりませんが/tmp
、その理由を説明しているマニュアルは見つかりません。
状況:
AFAICT これらは重要な点で同一です。ただし、MySQL コマンドラインで次のようにすると:
フォーラムの投稿から、errno 13 が許可の問題を示していることを収集しました。は MySQL で特別扱いされているようです/tmp
が、なぜですか? 私ができる最も近いのは、マニュアルの次の行です。
セキュリティ上の理由から、サーバー上にあるテキスト ファイルを読み取る場合、ファイルはデータベース ディレクトリに存在するか、すべてのユーザーが読み取り可能である必要があります。
/tmp
データベースディレクトリにはありませんが、そうであるかのように扱われる可能性があります。では、外部のファイルを読み取るためには、どのように設定すればよい/tmp
でしょうか?
mysql - LOAD DATA LOCAL INFILE が接続を失いました。タイムアウトを修正するにはどうすればよいですか?
LOAD DATA を使用して、大きなテキスト ファイルをデータベースにロードしています。ファイルの長さは約 122,000 行です。言うまでもなく、データベースはそのテーブルの AFTER INSERT でトリガーされるように設計されています。正確には、クエリの実行が開始され、15〜20分間実行され続けてから返されるということです
それから
エラーが表示された後、クエリを再実行するとすぐに終了します。
そして、テーブルは実際にインポートされます。
Mac OS X 10.6.4 で mysqld 5.1.51 を実行していますが、クエリは
データベース接続がタイムアウトしているようですが、どうすれば修正できますか?
mysql - LOAD DATA LOCAL INFILE が時々しか機能しない
MySQL ターミナルで正常に動作する LOAD DATA コマンドがあります。私のローカルサーバーから提供されたテストPHPファイルで正常に動作します。同じサーバーの phpMyAdmin で問題なく動作します。同じサーバー上でMagentoから実行すると、不可解に故障します。
すべての方法で同じログイン資格情報が使用されていることを確認しました。失敗したコマンド (接続以降のすべてのクエリを含む) をクエリ ログからコピーし、他の方法に貼り付けると、不思議なことに再び機能します。クエリ自体に問題があるわけではありません。
したがって、問題は権限の問題であるに違いないと推測します。ファイル特権が設定され、同じアカウントの他の実装に対して機能します。Magento は接続として pdo_mysql を使用しています。テストファイルでそれを複製すると、機能します。Magento が干渉しているパラメータを設定している必要があります。
私が得るエラーはですSQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version
。データベース サーバーにアクセスできることを保証できないため、"LOCAL" 修飾子キーワードを使用する必要があります。
ここで SOに関する最も近い前の質問は drupal に関するもので、エラーは異なりますが、drupal も pdo_mysql を使用して接続していることを思い出します。おそらく関連しています。Magento でのこのエラーに関する他の唯一の言及は、LOAD DATA LOCAL INFILE コマンドでも失敗するこのスレッドです。
mysql - Mysql:LOAD DATA INFILEクエリでRTRIMを使用するにはどうすればよいですか?
私のコードには、次のようなクエリがあります。
ロードしようとしているファイルに含まれている行の例を次に示します。
例の行の最後にかなりの数のスペースがあることに気付くでしょう。これらのスペースはすべて、行を終了する改行文字「\n」の前にあります。問題は、これらのスペースがデータベースに入力されることです。
LOAD DATA INFILE
コマンドの実行時に追加のスペースを削除するにはどうすればよいですか?使用する方法はありますRTRIM
か?
編集
ajrealが提案したように、ファイルを再準備する必要がありました。ファイルが準備された後、データベースに正しく挿入されました。これを実現するために、http: //gabeanderson.com/2008/02/01/unixlinux-find-replace-in-multiple-files/にあるbashスクリプトを変更しました。コードを以下に示します。
mysql - LOAD DATA INFILE 構文エラー
クエリ:load data infile 'systemmessage.txt' ignore into table systemmessage (message) lines starting by 'a,' terminated by '\0' ignore 1 lines
「開始する行」の近くで構文エラーが発生します。「開始」部分を削除すると、エラーは「終了」になります。それも削除すると、エラーは「1行を無視する」です。いったいどこが問題なの??ファイルが存在し、テーブルが存在します。すべてのチェックを削除すると、ロードされますが、データが間違っています。
mysql - LOAD DATA の奇妙な動作
基本的に膨大な量のデータをデータベースにロードする次のクエリがあります。
ファイル sp500hst-1.txt のスニペットは次のとおりです。
ファイルの長さは約150,000行で、「AFTER INSERT」トリガープロシージャ、テーブルのプライマリインデックス以外の2つのインデックスがありますquote
。
何が起こるかというと、クエリが 15 分間実行され続け、「サーバーへの接続が失われました」が返されます。クエリを再度実行すると、影響を受ける行の数で即座に成功が返されます。
時間がかかりすぎる理由は理解できますが、解決する必要があるのは「サーバーへの接続が失われた」不具合です。