Недопустимое значение по умолчанию для dateAdded.


91

У меня глупая проблема с SQL, которую я не могу исправить.

ALTER TABLE `новости` 
 ДОБАВИТЬ `dateAdded` DATETIME NOT NULL ПО УМОЛЧАНИЮ CURRENT_TIMESTAMP AUTO_INCREMENT,
 ДОБАВИТЬ ПЕРВИЧНЫЙ КЛЮЧ (`dateAdded`)

Ошибка:

(#1067)Invalid default value for 'dateAdded'

Кто-нибудь может мне помочь?


9
Это может быть глупый вопрос, но почему AUTO_INCREMENT DATETIME?
jave.web

Ответы:


138

CURRENT_TIMESTAMPдопустимо только на TIMESTAMPполях. DATETIMEполя должны быть оставлены либо с нулевым значением по умолчанию, либо без значения по умолчанию вообще - значения по умолчанию должны быть постоянным значением, а не результатом выражения.

соответствующие документы: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

Вы можете обойти это, установив в таблице триггер после вставки для заполнения значения «сейчас» в любых новых записях.


70
Похоже, что с mysql 5.6.5 вы можете использовать CURRENT_TIMESTAMP с полями DATETIME. См. Dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Франк Швитерман

2
Спасибо, Фрэнк, обнаружил эту проблему при попытке импортировать экспортированную базу данных из последней версии xampp в более раннюю.
The HCD

HCD, Фрэнк ... обнаружил ту же проблему при экспорте из MariaDb 10.x в MariaDB 5.5 ... спасибо
Аухан

1
Эта ошибка также возникает в mariadb 5.5. Обновитесь до mariadb 10, и проблема решена. Спасибо, Фрэнк
Сэмюэл Теслер


17

Также обратите внимание, что при указании DATETIMEas DATETIME(3)или like в MySQL 5.7.x вам также необходимо добавить такое же значение для CURRENT_TIMESTAMP(3). В противном случае он будет продолжать выдавать « Недопустимое значение по умолчанию ».


1
Это решило проблему для меня на 5.7.x. Мои поля datetime были определены как datetime (6), а использование CURRENT_TIMESTAMP (6) решило проблему
Брэд

1
Это очень важно отметить.
Матеуш Фелипе

1

У меня была такая же проблема, следующее исправление решило мою проблему.

  • Выберите Тип как "TIMESTAMP"

  • НЕ ЗАПУСКАЙТЕ НИЧЕГО В ПОЛЕ ДЛИНА / ЗНАЧЕНИЯ. СОХРАНИТЬ ПУСТО

  • Выберите CURRENT_TIMESTAMP в качестве значения по умолчанию.

Я использую MySQL версии 5.5.56



0

mysql версии 5.5 устанавливает значение по умолчанию для даты и времени, поскольку CURRENT_TIMESTAMP будет сообщать об ошибке, которую вы можете обновить до версии 5.6, он устанавливает значение по умолчанию для даты и времени как CURRENT_TIMESTAMP


0

Измените тип с datetime на timestamp, и он будет работать! У меня была такая же проблема для mysql 5.5.56-MariaDB - MariaDB Server Надеюсь, это может помочь ... извините, если он лишен

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.