오류 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_at및 updated_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로 업그레이드하는 단계
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
- 이미 실행중인 경우 MariaDB 중지
service mariadb stop 업데이트 수행
yum updateMariaDB 시작 및 업그레이드 수행
service mariadb startmysql_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
'program story' 카테고리의 다른 글
| 사람이 읽을 수있는 형식의 파일 크기 (0) | 2020.11.29 |
|---|---|
| Swift의 UINavigationBar 텍스트 색상 (0) | 2020.11.29 |
| jQuery에서 문자열을 어떻게자를 수 있습니까? (0) | 2020.11.29 |
| 다각형 교차를위한 간단한 알고리즘 (0) | 2020.11.28 |
| Windows 프로그램에서 WM_QUIT, WM_CLOSE 및 WM_DESTROY의 차이점은 무엇입니까? (0) | 2020.11.28 |



