2016-09-26 49 views
0

我正在將MySQL 5.5物理主機數據庫遷移到MySQL 5.6 AWS Aurora數據庫。我注意到,當使用INTO OUTFILE將數據寫入文件時,5.5將NULL值寫爲'\N',並將空字符串寫爲''。但是,5.6將空字符串和NULL寫入''MySQL 5.6,如何導出NULL爲 N?

查詢

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

我發現這個官方文件:

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

用固定行格式(如裝由TERMINATED FIELDS和 FIELDS所使用都是空的),NULL被寫爲空的 字符串。這會導致 表中的NULL值和空字符串在寫入文件時無法區分,因爲它們都被寫爲 作爲空字符串。如果您需要在 重新讀入文件時能夠分辨兩者,則不應使用固定行格式。

如何導出NULL'\N'

+0

你確定你不是指'null'(沒有'''')嗎?這將是5.5和5.6的默認行爲,對於引用文檔中的情況,5.5和5.6也是空的。你有沒有機會使用不同的'$ delimiter'?如果它是空的,它將產生「null」和「'」,正如引用所述。在你重新導入它之後(或者再次導出它),你是否在文件或數據庫中獲得了'\ N'' - 那麼你可能導入了錯誤。 – Solarflare

回答

1

如何導出NULL'\N'

首先,這很奇怪,爲什麼你想這麼做?但是,如果由於某種原因,你要導出這種方式,那麼你將有你的查詢從select *改爲使用CASE表達類似

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

正如評論,你可以如用IFNULL()功能或COALESCE()功能相同目的。

+0

當col1爲空的情況下,'\ N'else else col1以col1結束=== ifnull(col1,'\ N')AS col1 – SIDU

+0

我懷疑OP想要返回兩個字符,,,一個反斜槓字符和一個N,沒有一個換行符。要返回一個包含反斜槓和N ...字符串字符串的字符串,需要:''\\ N'' – spencer7593

+0

@ spencer7593,right suspect。感謝您指點。 – Rahul