6

5000 個の csv ファイルをデータベースにスキャンしています。残念ながら、ファイルには '' があり、0 を意味します。したがって、スクリプトを実行するたびにクラッシュします。このエラーは、厳密モードを無効にするだけで回避できると聞きました。そこで、厳密モードを無効にして、空の文字列を数値フィールドの 0 として読み取れるようにしました。ただし、エラーは持続しました。

厳密モードを無効にすると、「」を int フィールドに読み込むことができますか? ('' は 2 つのクォート、つまり空の文字列です)

もしそうなら、なぜ設定したのですか

sql_mode=''

my.ini 設定ファイルで問題を修正しません。

ありがとうございました!

4

4 に答える 4

20

コマンドを使用してCSVファイルをインポートすると思いますLOAD DATA INFILE。このコマンドを実行する前に、次のように入力します。

SET sql_mode = '';

さまざまな SQL モードの詳細については、ドキュメントを参照してください。

于 2012-06-14T19:49:23.533 に答える
1

LOAD DATA INFILEステートメントを変更して、値を修正できます。これらの線に沿った何かが機能するはずです。

LOAD DATA INFILE 'filepath.csv'
INTO TABLE MyTable(Column1,@Col2,@Col3)
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END;

このクエリは、値をそのまま column1 にインポートし、列 2 と 3 の値を修正します。これを使用すると、厳密モードを無効にする必要はなく、データベースに入るデータを実際に制御できます。信頼できる方法で修正できます。この機能を使用して、日付形式を変更したり、16 進数でエンコードされた BLOB 値をインポートしたりすることもできます。非常に便利な機能です。

于 2012-06-14T20:00:09.797 に答える
0

「保留」ではない設定に関するフォローアップの質問にコメントする担当者がまだいないため、これを回答に入れています。MySQL での私の経験では、構成ファイルの設定はサーバーの起動時にのみ読み取られるため、新しい設定を有効にするにはサーバーを再起動する必要があります。

サーバーは、コマンドを実行するときにコマンドライン クライアントが通信するデーモンであるため、コマンドライン クライアントを再起動しても実際にはサーバー自体は再起動しません。

この回答では、より詳細な説明が提供されています: https://serverfault.com/a/79051

于 2015-03-08T20:42:45.383 に答える