2016-09-26 9 views
0

私はMySQL 5.5物理ホストデータベースをMySQL 5.6 AWS Auroraデータベースに移行しています。私は、データがINTO OUTFILEを使ってファイルに書き込まれたとき、5.5がNULLの値を'\N'と書いていて、空の文字列が''と書いていることに気付きました。しかし、5.6は空文字列とNULLの両方を''と書いています。終了FIELDSと 場によって囲まれている場合に使用される固定行フォーマット(付MySQL 5.6、どの​​ように NとしてNULLをエクスポートするには?

https://dev.mysql.com/doc/refman/5.6/en/load-data.html

クエリ

SELECT * FROM $databasename.$tablename INTO OUTFILE $filename CHARACTER SET utf8 FIELDS ESCAPED BY '\\\\' TERMINATED BY $delimiter;

私はこれについて公式文書を発見しました両方とも空です)、NULLは空の文字列 として書き込まれます。これにより、空の文字列として が両方とも書き込まれるため、テーブルのNULL値と空の文字列が両方とも に書き込まれると区別できなくなります。 がファイルを読み込んだときに2つの区別をする必要がある場合は、固定行形式を使用しないでください。

NULL'\N'にエクスポートするにはどうすればよいですか?

+0

あなたは 'null '('' ''なし)の' \ N'を意味するのではないですか?これは5.5と5.6の両方のデフォルトの動作であり、ドキュメントの引用文の場合は5.5と5.6の両方で空になります。万が一異なる$区切り記号を使用しましたか?それが空であれば、引用符が示すように、 'null'と' '''の両方に対して "nothing"が生成されます。ファイルに ''\ N''を入れてしまったのか、それとも再インポートした後にデータベースに入れたのでしょうか?それを間違えてインポートした可能性があります。 – Solarflare

答えて

1

NULL'\N'にエクスポートするにはどうすればよいですか?

まず第一に、それは奇妙で、なぜそれをしたいのですか?何らかの理由で、あなたがそのようにエクスポートしたい場合はあなたにも同じのためIFNULL()機能やCOALESCE()機能を使用することができますコメントしかし、その後、あなたは

select 
case when col1 is null then '\\N' else col1 end as col1, 
... 
from $databasename.$tablename.... 

としてのようなCASE式を使用してselect *からあなたのクエリを変更する必要があります目的。

+0

大文字小文字が区別されない場合は '\ N'、大文字小文字は区別されないcol1は大文字小文字の区別がありません=== ifnull(col1、 '\ N')AS col1 – SIDU

+0

OPは2文字、 1つの改行文字ではありません。バックスラッシュとN ...文字列リテラルを含む文字列を返すには、 ''\\ N' 'でなければなりません。 – spencer7593

+0

@ spencer7593、右の容疑者。指してくれてありがとう。 – Rahul

関連する問題