2016-09-26 23 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