ERROR 1067 (42000): недопустимое значение по умолчанию для ‘created_at’

mysql
Вопрос:Когда я попытался изменить таблицу, она показывает ошибку ERROR 1067 (42000): Invalid default value for 'created_at' i google для этой ошибки, но все, что я нашел, это если они пытались изменить временную метку, эта ошибка произошла, но здесь я пытаюсь добавить новый столбец, и я получаю эту ошибку. mysql> ALTER TABLE investments ADD bank TEXT;

Вопрос:

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

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

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

mysql> ALTER TABLE investments ADD bank TEXT; ERROR 1067 (42000): Invalid default value for ‘created_at’

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

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

введите описание изображения здесь

Лучший ответ:

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

show variables like ‘sql_mode’ ;

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

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

set global sql_mode = ‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’; Ответ №1

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

SET sql_mode = »; Ответ №2

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

ALTER TABLE `investments` MODIFY created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

и

ALTER TABLE `investments` MODIFY updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

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

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

Ответ №3

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

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

SET GLOBAL sql_mode = »;

Ответ №4

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

Ответ №5

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

Изменить:

recollect_date TIMESTAMP DEFAULT ‘CURRENT_TIMESTAMP’,

в

recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

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

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

Ответ №6

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

CREATE TABLE `ttt` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `t1` TIMESTAMP NULL DEFAULT ‘0000-00-00 00:00:00’, `t2` TIMESTAMP NULL DEFAULT ‘0000-00-00 00:00:00’, `t3` TIMESTAMP NULL DEFAULT ‘0000-00-00 00:00:00’, `t4` TIMESTAMP NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

  • Поскольку значение 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.

см.

Пример

MariaDB []> insert into ttt (id) VALUES (1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 MariaDB []> select * from ttt; +—-+———————+———————+———————+———————+ | id | t1 | t2 | t3 | t4 | +—-+———————+———————+———————+———————+ | 1 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | | 2 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | | 3 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | +—-+———————+———————+———————+———————+ 3 rows in set (0.00 sec) MariaDB []> Ответ №7

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

SET SQL_MODE = «NO_AUTO_VALUE_ON_ZERO»; SET time_zone = «+00:00»;

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

Ответ №8

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

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

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

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

[MariaDB]
name = MariaDB
baseurl =
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

  1. Остановите MariaDB, если уже запущен service mariadb stop
  2. Выполнить обновление

    yum update

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

    service mariadb start

    mysql_upgrade

Все готово.

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

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

Ответ №9

Для Mysql5.7 войдите в командную строку mysql и выполните команду: mysql> show variable вроде “sql_mode”; Это покажет, что NO_ZERO_IN_DATE, NO_ZERO_DATE в sql_mode.

Попытайтесь добавить строку ниже [mysqld] в вашем файле mysql conf, чтобы убрать две опции, моя (mysql 5.7 в Ubuntu 16) – это /etc/mysql/mysql.conf.d/mysqld.cnf

Теперь перезапустите MySQL. Оно работает!

Ответ №10SET GLOBAL sql_mode = »;

Решил мою проблему.

Ответ №11

Просто конвертируйте его в эту строку:

для новой таблицы:

CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );

для существующей таблицы:

Alter ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Источник:

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