Недійсне значення за замовчуванням для "dateAdded"


90

У мене дурна проблема з SQL, яку я не можу виправити.

ЗМІНИТЬ ТАБЛИЦЮ `новини` 
 ДОДАТИ `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 ДОДАТИ ПЕРВИННИЙ КЛЮЧ (`dateAdded`)

Помилка:

(#1067)Invalid default value for 'dateAdded'

Хтось може мені допомогти?


8
Це може бути дурним запитанням, але чому ви AUTO_INCREMENT DATETIME?
jave.web

Відповіді:


137

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
Frank Schwieterman

2
Дякую, Френк, знайшов цю проблему при спробі імпортувати експортовану базу даних з останньої версії xampp у попередню.
HCD

HCD, Frank ... виявив ту саму проблему, яка експортувала з MariaDb 10.x до MariaDB 5.5 ... дякую
Аухан

1
Ця помилка трапляється і в mariadb 5.5. Оновлення до mariadb 10 та його вирішення. Дякую Френк
Самуель Теслер


16

Також зауважте, коли вказуєте DATETIMEяк DATETIME(3)або подобається MySQL 5.7.x, вам також потрібно додати те саме значення для CURRENT_TIMESTAMP(3). Якщо ні, він буде продовжувати кидати " Недійсне значення за замовчуванням ".


Це вирішило проблему для мене на 5.7.x. Мої поля дати і часу були визначені як дата-час (6), і використання CURRENT_TIMESTAMP (6) вирішило проблему
Бред

Це заслуговує на увагу.
Матеус Феліпе

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

Змініть тип із дати на мітку часу, і він запрацює! У мене була та сама проблема для mysql 5.5.56-MariaDB - Сервер MariaDB, сподіваюся, це може допомогти ... вибачте, якщо скасовано

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.