invalid default value for date modify

У меня есть следующий оператор создания sql

дает следующую ошибку

ERROR 1067 (42000): Invalid default value for ‘create_date’

Какая здесь ошибка?

Это из-за SQL-режима сервера — NO_ZERO_DATE.

Из справки: NO_ZERO_DATE — В строгом режиме не разрешайте ‘0000-00-00’ как действительную дату. Вы можете вставить нулевые даты с опцией IGNORE. Если не в строгом режиме, дата принимается, но генерируется предупреждение.

Если вы сгенерировали скрипт из рабочей среды MySQL.

Следующая строка генерируется

Удалите TRADITIONAL из SQL_MODE, и тогда скрипт должен нормально работать

Иначе, вы можете установить SQL_MODE как Разрешить недопустимые даты

TIMESTAMP имеет диапазон ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC (см. doc). Значение по умолчанию должно быть в этом диапазоне.

Другие нечетные, связанные, поведение:

Обратите внимание, если вы хотите вставить NULLS:

В Ubuntu Desktop 16.04 я сделал это:

Откройте файл: /etc/mysql/mysql.conf.d/mysqld.cnf в /etc/mysql/mysql.conf.d/mysqld.cnf редакторе.

Ищите: sql_mode , он будет где-то под [mysqld] .

и установите sql_mode в следующее:

Сохраните и перезапустите службу MySQL, выполнив:

sudo service mysql restart

Используя OS X, установите mysql из Homebrew, системные переменные, основанные на своих скомпилированных значениях по умолчанию. Решение состоит в том, чтобы удалить «NO_ZERO_DATE» из системных переменных «sql_mode».

Просто имейте в виду, что область охвата включает.

Если вы хотите повлиять только на свой сеанс, используйте «@@session» , например:

В этом случае это не повлияет на завершение сеанса или на его изменение. Это не влияет на другую сессию.

Если вы хотите повлиять на всех клиентов, используйте «@@global» , например:

В этом случае это влияет только на клиентов, которые подключаются после изменения (не влияют на текущих всех клиентов) и не будут работать после выхода сервера.

#1067 — Invalid default value for ‘date_now’

date_now DATETIME default CURRENT_TIMESTAMP,

TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

I have the following sql create statement

giving following error

ERROR 1067 (42000): Invalid default value for ‘create_date’

What is the error here?

13 Answers 13

That is because of server SQL Mode — NO_ZERO_DATE.

From the reference: NO_ZERO_DATE — In strict mode, don’t allow ‘0000-00-00’ as a valid date. You can still insert zero dates with the IGNORE option. When not in strict mode, the date is accepted but a warning is generated.

If you generated the script from the MySQL workbench.

The following line is generated

Remove TRADITIONAL from the SQL_MODE, and then the script should work fine

Else, you could set the SQL_MODE as Allow Invalid Dates

TIMESTAMP has a range of ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC (see doc). The default value must be within that range.

Other odd, related, behavior:

Side note, if you want to insert NULLS:

In ubuntu desktop 16.04, I did this:

open file: /etc/mysql/mysql.conf.d/mysqld.cnf in an editor of your choice.

Look for: sql_mode , it will be somewhere under [mysqld] .

and set sql_mode to the following:

Save and then restart mysql service by doing:

sudo service mysql restart

Using OS X, install mysql from Homebrew, System Variables based on its compiled-in defaults. Solution is to remove «NO_ZERO_DATE» from System Variables «sql_mode».

Just please keep in mind that scope involve.

If you want to affect only in your session, please use «@@session» , For example:

In this case, it will not affect once your session ends or your change it. It has not effect on other session.

If you want to affect on all client, please use «@@global» , for example:

In this case, it only affects on the clients that connect after the change(not affect on current all clients), and will not work once server exit.

Оцените статью