2016-09-26 3 views
0

Я переношу базу данных физического хоста MySQL 5.5 в базу данных MySQL 5.6 AWS Aurora. Я заметил, что когда данные записываются в файл с использованием INTO OUTFILE, 5.5 записывает значение NULL как '\N' и пустую строку как ''. Тем не менее, 5.6 записывает как пустую строку, так и NULL как ''.MySQL 5.6, как экспортировать NULL as 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 BY и ПОЛЯ ENCLOSED BY оба пустые), NULL записывается как пустая строка . Это приводит к тому, что значения NULL и пустые строки в таблице равны , если они записаны в файл, потому что оба они записаны как пустые строки. Если вам нужно будет рассказать обо всем, когда , прочитав этот файл, вы не должны использовать формат фиксированной строки.

Как я могу экспортировать NULL как '\N'?

+0

Вы уверены, что не имеете в виду '\ N' для' null' (без '' '')? Это будет поведение по умолчанию для 5.5 и 5.6, а для случая в вашей цитате из документации оно будет пустым и для 5.5, и для 5.6. Вы случайно использовали другой разделитель '$? Если он пуст, он будет генерировать «ничего» как для «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

case, когда col1 имеет значение null, тогда '\ N' else col1 end как col1 === ifnull (col1, '\ N') AS col1 – SIDU

+0

Я подозреваю, что OP хочет вернуть два символа ,,, символ обратной косой черты и N, и не один символ новой строки. Чтобы вернуть строку, содержащую обратную косую черту, и строковый литерал N ... должен быть: '' \\ N'' – spencer7593

+0

@ spencer7593, правый подозреваемый. Спасибо, что указал. – Rahul