Как решить автоматическое обновление даты в базе данных? [Дубликат]

Вы используете объект, содержащий ссылку нулевого значения. Таким образом, он дает пустое исключение. В примере строковое значение равно null, и при проверке его длины произошло исключение.

Пример:

string value = null;
if (value.Length == 0) // <-- Causes exception
{
    Console.WriteLine(value); // <-- Never reached
}

Ошибка исключения:

Необработанное исключение:

System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта. в Program.Main ()

5
задан Adam Wagner 15 November 2011 в 07:19
поделиться

4 ответа

Проблема заключается в ON UPDATE CURRENT_TIMESTAMP. Вы должны быть в состоянии отменить это поведение с помощью оператора alter, подобного этому (не уверен, что такое имя вашей таблицы):

ALTER TABLE leads MODIFY added_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
14
ответ дан Adam Wagner 1 September 2018 в 10:13
поделиться

Если вы хотите контролировать метку времени, просто измените ее на DATETIME, а затем обновите ее самостоятельно, когда хотите с помощью added_on=NOW()

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

4
ответ дан Alasdair 1 September 2018 в 10:13
поделиться

Вы добавили условие ON UPDATE в столбец !! Чтобы удалить это, переопределите столбец как

ALTER TABLE `mytable` MODIFY `added_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

Это эффективно устранит условие ON UPDATE.

2
ответ дан Pranav Hosangadi 1 September 2018 в 10:13
поделиться

Первый TIMESTAMP таблицы, по умолчанию имеет значение UPDATE CURRENT_TIMESTAMP. Чтобы предотвратить это (вместо изменения таблицы после этого), см. Здесь docs MySQL :

В столбцах TIMESTAMP и DATETIME нет автоматических свойств, если они не указаны явно, при этом Исключение: по умолчанию первый столбец TIMESTAMP имеет как DEFAULT CURRENT_TIMESTAMP, так и ON UPDATE CURRENT_TIMESTAMP, если они не указаны явно. Чтобы подавить автоматические свойства для первого столбца TIMESTAMP, используйте одну из следующих стратегий:

1) Включите системную переменную explicit_defaults_for_timestamp. Если эта переменная включена, доступны предложения DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP, которые указывают автоматическую инициализацию и обновление, но не назначены ни одному столбцу TIMESTAMP, если явно не включены в определение столбца.

2) Альтернативно, if explicit_defaults_for_timestamp отключен (по умолчанию), выполните одно из следующих действий:

2a) Определите столбец с предложением DEFAULT, которое задает постоянное значение по умолчанию.

2b) Укажите значение NULL атрибут. Это также приводит к тому, что столбец допускает значения NULL, что означает, что вы не можете назначить текущую временную метку, установив столбец в NULL. Назначение NULL устанавливает столбец в NULL.

1
ответ дан xtian 1 September 2018 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: