2015-10-16 5 views
0

Я пытаюсь создать таблицу с date подал и установите его значение по умолчанию now()дата MySQL против значения по умолчанию даты и времени

К моему удивлению, он не работает. Я получаю

Error # 1067 - Недопустимое значение по умолчанию для 'АБВ'

НО. Если я попытаюсь указать это поле вместо datetime, оно принимает значение now() в качестве значения по умолчанию!

Тот же результат, если я попытаюсь использовать значение CURRENT_TIMESTAMP() в качестве значения по умолчанию. datetime принимает, но date нет.

Теперь у меня есть два вопроса: 1) Почему? 2) Как заставить его работать?

Прежде чем вы ответите: здесь был найден аналогичный вопрос: Create a column 'Date' with default value current datetime MYSQL Но он принял ответ, который не говорит много. Он цитирует только документацию MySQL, подтверждающую, что это так, но не говорит, почему это так. И он не говорит, как обойти это, он просто предлагает использовать другой тип.

EDIT: похоже, ответ на вопрос 2 заключается в том, что это невозможно. Но это заставляет меня задаться вопросом еще больше, почему. Почему это делает разницу между датой и датой

ответ

0

Вы можете использовать CURRENT_DATE (псевдоним для CURDATE()), чтобы получить текущую дату. Это не принимает now() и CURRENT_TIMESTAMP(), потому что у них тоже есть компонент времени, в то время как в нем содержится только часть даты.

Если вы хотите использовать это в предложении default SQL, вы не должны . Вы должны использовать для этого триггер, если вам это нужно. Причины этого неизвестны мне, поэтому я не хотел бы слишком много размышлять над этим. Тем не менее, у меня такое чувство, что это «еще один MySQL-ошибка».

+0

же, как ответ rahautos'S. вы можете поместить now() в поле даты в инструкции insert или update, и оно работает. Но спасибо, что сказали, что это невозможно сделать. Я как бы ожидал, что это основано на документации, я просто не могу в это поверить. Я все еще хотел бы знать, почему корыто. –

0

CURDATE() предоставит текущую дату, в то время как NOW() даст полное время.

SELECT NOW(); // You will get date time 
SELECT CURDATE(); // You will get date 

Вашей проблема вашего формата дата и время

, если колонок типа Дата использование CURDATE()
, если колонок типа Datetime использование NOW()

+0

вы можете поместить now() в поле даты в инструкции insert или update, и оно работает. поэтому это не должно быть проблемой. Кроме того, выберите CURDATE(), дающую мне дату, но когда она находится в инструкции create table, она помечена как синтаксическая ошибка (не имеет значения, какое поле типа). –

Смежные вопросы