Ошибка mysql invalid default value for

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:

SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

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:

SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

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.

вот такой запрос

CREATE TABLE `main_documents` (
  `id` int(11) NOT NULL,
  `employee_id` int(11) DEFAULT NULL,
  `citizenship_id` int(11) DEFAULT NULL,
  `document_type_id` int(11) DEFAULT NULL,
  `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `middle_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birthday` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `hometown` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `issue_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `expiration_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `gender` int(11) DEFAULT NULL,
  `series` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `scan_id` int(11) DEFAULT NULL,
  `issued_by` text COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

выдает такую ошибку

#1067 — Invalid default value for ‘issue_date’

честно пытался гуглить но не смог понять в чем проблема

Материал из Wiki — Iphoster — the best ever hosting and support. 2005 — 2023

Перейти к:навигация, поиск

MySQL — решение ошибки «Invalid default value for» и NO ZERO IN DATE, NO ZERO DATE

Ошибка при импорте БД через phpmyadmin:

ERROR 1067 (42000) at line 351: Invalid default value for 'table_name'

может означать, что на сервере в в sql_mode — выставлены значения NO_ZERO_IN_DATE, NO_ZERO_DATE:

NO_ZERO_IN_DATE,NO_ZERO_DATE - не позволяют в таблицу вносить значения даты "0000-00-00"

Открываем конфиг файл MySQL сервера my.cnf и меняем значения sql_mode убирая оттуда NO_ZERO_IN_DATE,NO_ZERO_DATE:

# vi /etc/my.cnf
sql_mode=IGNORE_SPACE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

После этого перезапускаем MySQL сервер (для CentOS 7):

# systemctl restart mysqld

и повторяем импорт базы MySQL

Перейти к содержимому

При импорте одной базы у меня начала выскакивать ошибка

ERROR 1067 (42000) at line 1623: Invalid default value for 'date_added'

а сама проблемная строка в дампе имела такой вид

`date_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'дата добавления страницы',

Оказалось, что такой вариант записи подходит для MySQL 5.6 и выше, а у меня на сервере оказалась древняя MySQL 5.1. (sic).

Решить эту проблему можно двумя способами.

Способ №1 — сменить тип поля DATETIME на TIMESTAMP

При таком варианте, запись

`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'дата добавления страницы',

становится православной и дамп импортируется корректно, однако TIMESTAMP отличается от DATETIME тем, что зависит от временной зоны (более подробные отличия тут
— https://habr.com/post/61391/) и новость выложенная условно в 2 часа ночи становится немного странной, поэтому

Способ №2 — добавить триггер при создании записи

Но перед добавлением самого триггера, в моем случае нужно было поставить какое-нибудь дефолтное значение для поля, потому что на 0 MySql сыпал варнингами, поэтому я поставил вот так «2018-01-10 16:35:38» — дата на самом деле не важна, главное чтоб она была :), а затем прописал такой триггер

drop trigger if exists `ocpm_information_date_added_created`; -- удаляем если он есть
create trigger `ocpm_information_date_added_created` before insert -- создаем на событие before insert
    on `ocpm_information` -- имя таблицы
    for each row 
    set new.`date_added` = now();  -- имя поля

и все заработало.

Running MySQL 5.5, got the error above when I tried to import a .sql file

I’ve checked the SQL_MODE of my server and nothing similar to ‘NO_ZERO_DATE’ is found

As well, I’ve took out the text of ‘STRICT_MODE’ from my my.ini file and restarted the server, yet this error still persists

Here’s the .sql file being imported

CREATE TABLE  `street_segment` (
  `ID` int(8) NOT NULL,
  `PROVINCE_CODE` varchar(2) NOT NULL,
  `POSTAL_CODE` varchar(6) NOT NULL,
  `MUNICIPALITY_NAME` varchar(30) default NULL,
  `STATUS` varchar(16) NOT NULL,
  `LAST_UPDATED` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `DIRECTORY_AREA_NAME` varchar(30) default NULL,
  `STREET_NAME` varchar(255) default NULL,
  `STREET_TYPE_CODE` varchar(6) default NULL,
  `STREET_DIRECTION_CODE` varchar(2) default NULL,
  `ADDRESS_SEQ_CODE` int(8) default NULL,
  `STREET_ADDRESS_FROM_NUMBER` varchar(6) default NULL,
  `STREET_ADDRESS_TO_NUMBER` varchar(6) default NULL,
  `NUMBER_SUFFIX_FROM` varchar(6) default NULL,
  `NUMBER_SUFFIX_TO` varchar(6) default NULL,
  `SUITE_NUMBER_FROM` varchar(6) default NULL,
  `SUITE_NUMBER_TO` varchar(6) default NULL,
  `STREET_NAME_ACCENT_F` int(1) default 0,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Понравилась статья? Поделить с друзьями:
  • Ошибка mysql duplicate entry 1 for key primary
  • Ошибка mysql access denied for user root localhost
  • Ошибка mysql 1146 что это
  • Ошибка mysql 1114 что делать
  • Ошибка mysql 1046 no database selected