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