program story

오류 1067 (42000) : 'created_at'에 대한 잘못된 기본값

inputbox 2020. 11. 29. 10:24
반응형

오류 1067 (42000) : 'created_at'에 대한 잘못된 기본값


테이블을 변경하려고 할 때 표시 오류

ERROR 1067 (42000): Invalid default value for 'created_at'

나는이 오류에 대해 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 "를 제거하십시오 . 이것은 mysql 새 버전의 기본 sql_mode입니다.

다음 명령을 사용하여 sql_mode를 루트로 전역 적으로 설정할 수 있습니다.

set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

간단히, 명령문을 실행하기 전에 다음을 첫 번째 줄에 넣으십시오.

SET sql_mode = '';

타사 데이터베이스를 설치하는 동안 동일한 오류가 발생했습니다. 제안 된 솔루션을 시도했지만 실패했습니다.
SET sql_mode = '';

그런 다음 데이터베이스를 설치할 수 있도록 작동하는 아래 명령을 시도했습니다.
SET GLOBAL sql_mode = '';


다음 명령을 시도하고 실행하십시오.

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_atupdated_at필드에 대한 기본값을 설정하지 않았기 때문 입니다. 이 열의 값은 null이 될 수 없으므로 MySQL은 명령을 수락하지 않습니다.

도움이 되었기를 바랍니다.


제 경우에는 가져올 파일이 있습니다. 그래서 간단히 SET sql_mode = ''; 파일의 시작 부분에서 작동합니다!


다음 쿼리를 실행합니다.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

그것은 나를 위해 작동합니다


비슷한 문제가있었습니다. 다음은 해결되었습니다.

변화:

recollect_date TIMESTAMP DEFAULT 'CURRENT_TIMESTAMP',

에:

recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

즉, CURRENT_TIMESTAMP 주위의 따옴표를 제거하십시오 .

이것이 누군가를 돕기를 바랍니다.


다음과 같이 할 수 있습니다.

 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로 저장되므로 두 번째 # 0이 '0000-00-00 00:00:00을 나타내는 데 사용되므로 타임 스탬프 값'1970-01-01 00:00:00 '(UTC)이 예약됩니다. '.
  • MariaDB 5.5 이전에는 CURRENT_TIMESTAMP가 기본값으로 정의 된 테이블 당 하나의 TIMESTAMP 열만있을 수있었습니다. 이 제한은 MariaDB 10.0 이후로 더 이상 적용되지 않습니다.

참조 : https://mariadb.com/kb/en/mariadb/timestamp/

견본

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 []>

SET GLOBAL sql_mode = '';

내 문제를 해결했습니다.


@Bernd Buffen의 답변에서 언급했듯이. 이것은 MariaDB 5.5의 문제이며, MariaDB 5.5를 MariaDB 10.1로 간단히 업그레이드하고 문제가 해결되었습니다.

CentOS 7 (64 비트) 에서 MariaDB 5.5를 MariaDB 10.1로 업그레이드하는 단계

  1. MariaDB repo에 다음 줄을 추가합니다.

    nano /etc/yum.repos.d/mariadb.repo 다음 줄을 붙여 넣습니다.

[mariadb]
NAME = MariaDB
base을 = http://yum.mariadb.org/10.1/centos7-amd64
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


참고 : 업그레이드를 수행하기 전에 항상 데이터베이스를 백업하십시오. 업그레이드에 실패하거나 문제가 발생하면 데이터가 손실 될 수 있습니다.


Mysql5.7의 경우 mysql 명령 줄에 로그인하고 명령을 실행합니다. mysql> show variables like 'sql_mode'; sql_mode에서 NO_ZERO_IN_DATE, NO_ZERO_DATE가 표시됩니다.

여기에 이미지 설명 입력

mysql conf 파일에서 [mysqld] 아래에 줄을 추가하여 두 옵션을 제거하십시오. mine (Ubuntu 16의 mysql 5.7)은 /etc/mysql/mysql.conf.d/mysqld.cnf입니다.

여기에 이미지 설명 입력

이제 mysql을 다시 시작하십시오. 효과가있다!


이 오류가 발생하면 상태 Copy database에서 phpmyadmin다음을 수행 할 수 있습니다 :

확인란을 선택하십시오 Add DROP TABLE / DROP VIEW.

여기에 이미지 설명 입력


다음 줄로 변환하십시오.

새 테이블의 경우 :

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

기존 테이블의 경우 :

Alter ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

출처 :

https://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html

참고 URL : https://stackoverflow.com/questions/36882149/error-1067-42000-invalid-default-value-for-created-at

반응형