MySQL "dateTime не нуль по умолчанию" 1970-01-01 "" повернут до 0000-00-00 00:00:00
-
01-10-2019 - |
Вопрос
У меня есть колонка, созданная как
`date_start` dateTime не нуль по умолчанию" 1970-01-01 '
Однако, когда я зарабатываю данные из файла CSV с командой данных нагрузки с пустой записью для date_start
Сохраненная стоимость 0000-00-00 00:00:00?
Решение
Режим MySQL SQL по умолчанию позволяет нулевым датам.
Моя вера состоит в том, что команда Inflile Data Data считывает бланк позиции, предназначенную для того, чтобы быть датом, и автоматически используя нулевую дату перед вставкой. Это объяснило бы, почему ваше ограничение по умолчанию не применяется - значение не является нулевым при введении.
Я думаю, у вас есть два варианта:
- Обновите все пробелы в вашем CSV от «,« на », NULL,« или », по умолчанию,« так что они будут интерпретировать правильно
- Изменить режим SQL:
SET SQL_MODE='NO_ZERO_DATE'
Другие советы
NULL
И «пустой запись» не всегда относится к тому же в MySQL. В случае datetime
Тип данных, пустые записи автоматически преобразуются в 0000-00-00 00:00:00. Вы можете думать об этом как форму типопередача, где бланк получает типограф на ноль.
В вашем файле данных попробуйте заменить все пустые даты с помощью DEFAULT
ключевое слово.
datetime
означает, что ваша колонна хранится дата и время в формате Y-m-d H:i:s
(0000-00-00 00:00:00
).
date
означает, что ваши колоночные магазины просто дата в формате Y-m-d
(0000-00-00
).
Если вы не укажете значение при вставке данных, используется по умолчанию, но когда вы вставляете данные из файла CSV, он указывает значение для поля, поэтому значение по умолчанию не используется.
Пустая запись - неверное значение для поля DateTime, поэтому значение 0000-00-00 00:00:00
используется вместо всего, что и с любым значением, которое не может быть проанализировано до действительной даты (или частичной даты).
MySQL имеет раздражающее (на мой взгляд) поведение, которое при некоторых обстоятельствах, если дано неверное значение для хранения в столбце, вместо этого он будет хранить предварительно определенное «значение ошибки». Например, в контексте даты или даты, он будет хранить «нулевую дату», которое вы заметили; Для колонны Enum он будет хранить «» (соответствует 0 в числовом контексте) в качестве значения ошибки.
Хотя это неелегант, вы можете попробовать выполнить импорт и позволяя вставлять недействительные нулевые даты, а затем выдавать
UPDATE
table_name
SET
date_start = '1970-01-01 00:00:00'
WHERE
date_start = '0000-00-00 00:00:00'