Недопустимое значение по умолчанию для 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, и проблема решена. Спасибо, Фрэнк
Сэмюэл Теслер
51

CURRENT_TIMESTAMPзависит от версии и теперь разрешен для DATETIMEстолбцов, начиная с версии 5.6.

См. Документацию MySQL .

Дэвид Сусан
источник
9
Ты уверен ? Я получаю указанную выше ошибку в версии 5.7.x
Рамеш Парик
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.6.27 на моем LEMP и CURRENT_TIMESTAMP, так как значение по умолчанию работает нормально.

Авраам Тугалов
источник
0

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

张春吉
источник
0

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

Хамид ЭР-РЕМЛИ
источник