1067 invalid default value for

Заметил однажды при импорте sql файла следующую ошибку:

ERROR 1067 (42000) at line 211: Invalid default value for ‘blablabla’

Она возникает в связи с тем что новые версии MySQL сервера используют строгий режим и такие параметры как NO_ZERO_DATE не позволяют вносить в базу значения даты как например ‘0000-00-00’.

Подключимся к mysql серверу:

Выполним запрос который отобразит значения sql_mode:

Скопируем строку с этими значениями и выйдем из mysql:

Откроем файл конфигурации например в текстовом редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

У меня в файле не было sql_mode=, по этому в конце файла вставим строку со скопированными ранее значениями убрав из нее NO_ZERO_IN_DATE,NO_ZERO_DATE, в моё случае получилось следующее:

Перезапустим mysql чтобы применить изменения:

Все, теперь при импорте данной ошибки не должно быть.

When i tried to alter the table its showing error

i google for this error but all i found is if they tried to alter the timestamp this error is occured but here i am trying to add new column and i am getting this error

and my table has last two columns are created_at and updated_at

here is my table structure

13 Answers 13

The problem is because of sql_modes. Please check your current sql_modes by command:

And remove the sql_mode «NO_ZERO_IN_DATE,NO_ZERO_DATE» to make it work. This is the default sql_mode in mysql new versions.

You can set sql_mode globally as root by command:

Simply, before you run any statements put this in the first line:

I came across the same error while trying to install a third party database. I tried the solution proposed unsuccessfully i.e.
SET sql_mode = »;

Then I tried the command below which worked allowing the database to be installed
SET GLOBAL sql_mode = »;

Try and run the following command:

The reason you are getting this error is because you are not setting a default value for the created_at and updated_at fields. MySQL is not accepting your command since the values for these columns cannot be null.

Hope this helps.

In my case I have a file to import. So I simply added SET sql_mode = »; at the beginning of the file and it works!

it works for me

I had similar problem. Following solved it:

recollect_date TIMESTAMP DEFAULT ‘CURRENT_TIMESTAMP’,

recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

i.e. just remove the quotes around CURRENT_TIMESTAMP.

Hope this helps someone.

You can do it like this:

  • Because the TIMESTAMP value is stored as Epoch Seconds, the timestamp value ‘1970-01-01 00:00:00’ (UTC) is reserved since the second #0 is used to represent ‘0000-00-00 00:00:00’.
  • In MariaDB 5.5 and before there could only be one TIMESTAMP column per table that had CURRENT_TIMESTAMP defined as its default value. This limit has no longer applied since MariaDB 10.0.

Когда я попытался изменить таблицу, она показывает ошибку

i google для этой ошибки, но все, что я нашел, это если они пытались изменить временную метку, эта ошибка произошла, но здесь я пытаюсь добавить новый столбец, и я получаю эту ошибку.

и моя таблица имеет последние два столбца created_at и updated_at

вот моя структура таблицы

Проблема из-за sql_modes. Пожалуйста, проверьте ваши текущие sql_modes командой:

И удалите sql_mode » NO_ZERO_IN_DATE, NO_ZERO_DATE «, чтобы заставить его работать. Это sql_mode по умолчанию в новых версиях mysql.

Вы можете установить sql_mode глобально как root с помощью команды:

Просто перед запуском любых операторов поместите это в первую строку:

Попробуйте выполнить следующую команду:

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не устанавливаете значение по умолчанию для полей created_at и updated_at . MySQL не принимает вашу команду, поскольку значения для этих столбцов не могут быть нулевыми.

Надеюсь, что это поможет.

Я столкнулся с той же ошибкой при попытке установить стороннюю базу данных. Я попробовал решение, предложенное безуспешно, т.е.
SET sql_mode = »;

Затем я попробовал команду ниже, которая работала, позволяя устанавливать базу данных

SET GLOBAL sql_mode = »;

В моем случае у меня есть файл для импорта. Поэтому я просто добавил SET sql_mode = »; в начале файла, и он работает!

У меня была аналогичная проблема. После этого он решил:

recollect_date TIMESTAMP DEFAULT ‘CURRENT_TIMESTAMP’,

recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

то есть. просто удалите кавычки вокруг CURRENT_TIMESTAMP.

Надеюсь, это поможет кому-то.

Вы можете сделать это следующим образом:

  • Поскольку значение TIMESTAMP хранится как Epoch Seconds, значение временной метки ‘1970-01-01 00:00:00′ (UTC) зарезервировано, так как второе # 0 используется для представления 0000-00-00 00: 00:00’.
  • В MariaDB 5.5 и до этого может быть только один столбец TIMESTAMP для каждой таблицы, для которого значение CURRENT_TIMESTAMP определено как значение по умолчанию. Этот предел больше не применяется с MariaDB 10.0.

Пример

Запустите этот запрос:

он работает для меня

Как уже упоминалось в ответе @Bernd Buffen. Это проблема с MariaDB 5.5, я просто обновляю MariaDB 5.5 до MariaDB 10.1 и проблема решена.

Вот шаги по обновлению MariaDB 5.5 до MariaDB 10.1 в CentOS 7 (64-разрядная версия)

Добавьте следующие строки в репозиторий MariaDB.

nano/etc/yum.repos.d/mariadb.repo и вставьте следующие строки.

    Остановите MariaDB, если уже запущен service mariadb stop

Запуск MariaDB и выполнение обновления

service mariadb start

Проверьте версию MariaDB: mysql -V

ПРИМЕЧАНИЕ. Всегда выполняйте резервное копирование баз данных перед выполнением обновлений. Данные могут быть потеряны, если обновление не удалось или что-то пошло не так.

Оцените статью
Добавить комментарий