[mysql] 오류 1067 (42000) : ‘created_at’에 대한 잘못된 기본값

테이블을 변경하려고 할 때 오류가 표시되었습니다.

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

나는이 오류를 검색했지만 내가 찾은 것은 마치 타임 스탬프를 변경하려고 시도한 것 같아서 발생했습니다. 그러나 여기에 새 열을 추가하려고하는데이 오류가 발생합니다.

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

내 테이블의 마지막 두 열은 created_atupdated_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_at및에 대한 기본값을 설정하지 않았기 때문입니다.updated_at 필드에 입니다. 이 열의 값은 null 일 수 없으므로 MySQL은 명령을 수락하지 않습니다.

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


답변

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


답변

다음 쿼리를 실행합니다.

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

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


답변

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

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