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, NULL로 N을 내보내는 방법?

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 값과 빈 문자열 모두가 이 공백 문자열로 작성 되었기 때문에 파일에 쓸 때 구별 할 수 없게됩니다. 파일을 다시 읽을 때 두 가지를 구분할 수 있어야하는 경우 고정 행 형식을 사용하면 안됩니다.

NULL'\N'으로 내보내려면 어떻게해야합니까?

+0

'' '('' ''없이)'\ N'을 사용 하시겠습니까? 이는 5.5와 5.6 모두에 대한 기본 동작이며 문서의 견적에있는 경우 5.5와 5.6 모두에 대해 비어있게됩니다. 혹시 다른 $ 구분자를 사용하셨습니까? 비어있는 경우에는 따옴표가 말한 것처럼'null'과'' ''모두에 대해 "아무것도"생성하지 않습니다. 파일에서 '\ 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

col1이 null이면 '\ N'else col1 end as col1 === ifnull (col1, '\ N') AS col1 – SIDU

+0

OP가 두 개의 문자, 백 슬래시 문자 및 N을 반환하려고합니다. 한 줄 바꿈 문자가 아닙니다. 역 슬래시와 N ... 문자열 리터럴을 포함하는 문자열을 반환하려면 ''\\ N ''이되어야합니다. – spencer7593

+0

@ spencer7593, 맞습니다 용의자. 가리키는 주셔서 감사합니다. – Rahul