У меня есть два столбца в таблице пользователей, а именно, registerDate and lastVisitDate
которые состоят из типа данных datetime. Я хотел бы сделать следующее.
- Установите значение по умолчанию для registerDate в MySQL NOW ()
- Установите значение по умолчанию для lastVisitDate
0000-00-00 00:00:00
вместо null, которое используется по умолчанию.
Поскольку таблица уже существует и имеет существующие записи, я хотел бы использовать таблицу Modify. Я попытался использовать два кода ниже, но ни один из них не работает.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Это дает мне ошибку: ERROR 1067 (42000): Invalid default value for 'registerDate'
Можно ли для меня установить значение даты и времени по умолчанию NOW () в MySQL?
mysql
sql
datetime
mysql-error-1067
Ибрагим Азар Армар
источник
источник
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
, Вы не определилиdata type
поле в обеих ваших попыткахDATE
должен работать со значением по умолчаниюNOW()
Ответы:
Начиная с MySQL 5.6.5, вы можете использовать
DATETIME
тип с динамическим значением по умолчанию:Или даже объединить оба правила:
Ссылка:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
До версии 5.6.5 вам необходимо использовать
TIMESTAMP
тип данных, который автоматически обновляется при каждом изменении записи. К сожалению, однако, дляTIMESTAMP
каждой таблицы может существовать только одно автоматически обновляемое поле.Смотрите: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Если вы хотите запретить MySQL обновлять значение метки времени
UPDATE
(чтобы оно включалось толькоINSERT
), вы можете изменить определение на:источник
DATETIME
часто предпочитают использовать диапазон, который он может содержать: от «1000-01-01 00:00:00» до «9999-12-31 23:59:59» по сравнению сTIMESTAMPS
«s» 1970-01-01 00: 00:01 UTC до 2038-01-19 03:14:07 UTC. Для целей хранения дат рождения или, например, более 30 лет в будущем.timestamp
для этого поведения с MySQL 5.6Я использую триггер в качестве обходного пути, чтобы установить поле даты и времени в NOW () для новых вставок:
это должно работать и для обновлений
Ответы Йохана и Леонардо включают преобразование в поле метки времени. Хотя это, вероятно, хорошо для варианта использования, представленного в вопросе (хранение RegisterDate и LastVisitDate), это не универсальное решение. Смотрите вопрос о дате и времени .
источник
use a timestamp
это глупый обходной путь, если вы действительно узнаете разницу между этими двумя типами данных.Мое решение
источник
TIMESTAMP
колонки. Никто не просилTIMESTAMP
...EUREKA !!!
Для всех тех, кто упал духом, пытаясь установить значение по умолчанию DATETIME в MySQL , я точно знаю, что вы чувствуете / чувствовали. Итак, вот оно:
Обратите внимание, что я не добавил одинарные кавычки / двойные кавычки вокруг 0 .
Важное обновление :
Этот ответ был размещен давно. Тогда это работало над моей (возможно, последней) установкой MySQL, и я чувствовал, что хочу поделиться ею. Пожалуйста, прочитайте комментарии ниже, прежде чем вы решите использовать это решение сейчас.
источник
Документы mysql 5.6 говорят, что CURRENT_TIMESTAMP может использоваться по умолчанию для типов данных TIMESTAMP и DATETIME:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
источник
В версиях mysql 5.6.5 и новее вы можете использовать точное время и установить значения по умолчанию. Однако есть тонкий бит, который должен передавать значение точности как в функцию datetime, так и в вызов функции NOW ().
Этот пример работает:
Этот пример не работает:
источник
Может использоваться для обновления метки времени при обновлении.
источник
Лучший способ - использовать «ПО УМОЛЧАНИЮ 0». Другой путь:
источник
Это сработало для меня, используя MySQL:
источник
Наконец, это сработало для меня!
источник
источник
Не уверен, что это все еще активно, но здесь идет.
Что касается установки значений по умолчанию Now (), я не вижу, чтобы это было возможно для типа данных DATETIME. Если вы хотите использовать этот тип данных, установите дату выполнения вставки следующим образом:
Моя версия MySQL 5,5
источник
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Это сработало для меня - просто изменил INSERT на UPDATE для моего стола.
источник