테이블을 변경하려고 할 때 오류가 표시되었습니다.
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_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_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 []>
