이 오류는 최신 MYSQL 5.7 문서에 따라 엄격 모드가 될 수있는 SQL 모드 때문입니다.
MySQL 문서 5.7은 다음과 같이 말합니다 .
Strict 모드는 서버가 '0000-00-00'을 유효한 날짜로 허용하는지 여부에 영향을줍니다. Strict 모드가 활성화되지 않은 경우 '0000-00-00'이 허용되고 삽입시 경고가 생성되지 않습니다. 엄격 모드가 활성화 된 경우 '0000-00-00'은 허용되지 않으며 IGNORE도 제공되지 않는 한 삽입시 오류가 발생합니다. INSERT IGNORE 및 UPDATE IGNORE의 경우 '0000-00-00'이 허용되며 삽입시 경고가 생성됩니다.
MYSQL 모드를 확인하려면
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
STRICT_TRANS_TABLES 모드 비활성화
그러나 형식을 허용하려면 0000-00-00 00:00:00
mysql 구성 파일 또는 명령으로 STRICT_TRANS_TABLES 모드를 비활성화해야합니다.
명령으로
SET sql_mode = '';
또는
SET GLOBAL sql_mode = '';
키워드를 사용 GLOBAL
하려면 슈퍼 권한이 필요하며 해당 시점부터 모든 클라이언트가 연결하는 작업에 영향을줍니다.
위가 작동하지 않는 경우 /etc/mysql/my.cnf
(우분투에 따라)로 이동하여 주석 처리하십시오.STRICT_TRANS_TABLES
영구적 서버 시작시 SQL 모드를 설정하려는 경우 또한, 다음을 포함 SET sql_mode=''
에 my.cnf
리눅스 나 맥 OS에. Windows의 경우 이것은 my.ini
파일 에서 수행되어야 합니다.
노트
그러나 엄격 모드는 MYSQL 5.6에서 기본적으로 활성화되지 않습니다. 따라서 그것은에 따라 오류를 생성하지 않습니다 MYSQL 6 문서를 말한다
MySQL에서는 "0"값 '0000-00-00'을 "더미 날짜"로 저장할 수 있습니다. 이는 경우에 따라 NULL 값을 사용하는 것보다 더 편리하며 데이터 및 인덱스 공간을 적게 사용합니다. '0000-00-00'을 허용하지 않으려면 NO_ZERO_DATE SQL 모드를 활성화하십시오.
최신 정보
@ Dylan-Su가 말한 버그 문제와 관련하여 :
나는 이것이 시간이 지남에 따라 MYSQL이 진화하는 방식의 버그라고 생각하지 않습니다. 이로 인해 제품의 추가 개선에 따라 일부가 변경됩니다.
그러나 NOW()
기능 에 관한 또 다른 관련 버그 보고서가 있습니다.
Datetime 필드는 기본 NOW ()를 허용하지 않습니다.
또 다른 유용한 정보 [ TIMESTAMP 및 DATETIME에 대한 자동 초기화 및 업데이트 참조 ]
MySQL 5.6.5부터 TIMESTAMP 및 DATETIME 열은 자동으로 초기화되고 현재 날짜 및 시간 (즉, 현재 타임 스탬프)으로 업데이트 될 수 있습니다. 5.6.5 이전에는 TIMESTAMP 및 테이블 당 최대 하나의 TIMESTAMP 열에 대해서만 적용됩니다. 다음 노트에서는 먼저 MySQL 5.6.5 이상에 대한 자동 초기화 및 업데이트에 대해 설명하고 5.6.5 이전 버전의 차이점에 대해 설명합니다.
NO_ZERO_DATE에 대한 업데이트
MySQL 5.7.4부터이 모드는 더 이상 사용되지 않습니다. 이전 버전의 경우 구성 파일에서 각 줄을 주석 처리해야합니다. NO_ZERO_DATE에 대한 MySQL 5.7 문서 참조
NULL
입니다.