MySQL "dateTime не нуль по умолчанию" 1970-01-01 "" повернут до 0000-00-00 00:00:00

StackOverflow https://stackoverflow.com/questions/3669348

Вопрос

У меня есть колонка, созданная как

`date_start` dateTime не нуль по умолчанию" 1970-01-01 '

Однако, когда я зарабатываю данные из файла CSV с командой данных нагрузки с пустой записью для date_start Сохраненная стоимость 0000-00-00 00:00:00?

Это было полезно?

Решение

Режим MySQL SQL по умолчанию позволяет нулевым датам.

Моя вера состоит в том, что команда Inflile Data Data считывает бланк позиции, предназначенную для того, чтобы быть датом, и автоматически используя нулевую дату перед вставкой. Это объяснило бы, почему ваше ограничение по умолчанию не применяется - значение не является нулевым при введении.

Я думаю, у вас есть два варианта:

  1. Обновите все пробелы в вашем CSV от «,« на », NULL,« или », по умолчанию,« так что они будут интерпретировать правильно
  2. Изменить режим 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top