'create_date' 타임스탬프 필드의 기본값이 잘못되었습니다.
다음 sql create 문이 있습니다.
mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` (
-> `id` INT(11) NOT NULL AUTO_INCREMENT ,
-> `name` VARCHAR(100) NOT NULL ,
-> `description` VARCHAR(255) NOT NULL ,
-> `live_start_date` DATETIME NULL DEFAULT NULL ,
-> `live_end_date` DATETIME NULL DEFAULT NULL ,
-> `notes` VARCHAR(255) NULL ,
-> `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
-> `created_by` INT(11) NOT NULL ,
-> `update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
-> `updated_by` INT(11) NOT NULL ,
-> `status` VARCHAR(45) NOT NULL ,
-> PRIMARY KEY (`id`) )
-> ENGINE = InnoDB;
다음 오류 발생
ERROR 1067 (42000): Invalid default value for 'create_date'
여기 뭐가 잘못됐나요?
이는 서버 SQL 모드 - NO_ZERO_DATE 때문입니다.
★★★★★★★★★★★★★★★★★★★~NO_ZERO_DATE
돼요 - strict 모 、 doesn 、 doesn 、 - 、 - - - - - - - - - - - - - - - - 。'0000-00-00'
유효일자로 합니다.IGNORE 옵션을 사용하여 계속 0 날짜를 삽입할 수 있습니다.strict 모드가 아닌 경우 날짜는 허용되지만 경고가 생성됩니다.
MySQL 워크벤치에서 스크립트를 생성한 경우.
다음 행이 생성됩니다.
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
SQL_MODE에서 TRADIAL을 삭제하면 스크립트는 정상적으로 동작합니다.
또는 SQL_MODE를 잘못된 날짜 허용으로 설정할 수 있습니다.
SET SQL_MODE='ALLOW_INVALID_DATES';
TIMESTAMP의 범위는 '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07'입니다(문서 참조).기본값은 이 범위 내에 있어야 합니다.
기타 이상하고 관련된 동작:
CREATE TABLE tbl1 (
ts TIMESTAMP);
Query OK, 0 rows affected (0.01 sec)
CREATE TABLE tbl2 (
ts TIMESTAMP,
ts2 TIMESTAMP);
ERROR 1067 (42000): Invalid default value for 'ts2'
CREATE TABLE tbl3 (
ts TIMESTAMP,
ts2 TIMESTAMP DEFAULT '1970-01-01 00:00:01');
Query OK, 0 rows affected (0.01 sec)
NULLS를 삽입하려면 다음 사항을 참고하십시오.
CREATE TABLE tbl4 (
ts TIMESTAMP NULL DEFAULT NULL);
ubuntu 데스크톱 16.04에서는 다음과 같이 했습니다.
있는 파일: " " open열 open :
/etc/mysql/mysql.conf.d/mysqld.cnf
하하는편편편편선선선 선선선선선sql_mode
[mysqld]
.를 설정합니다.
sql_mode
음음음같 뭇매하다NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
다음 절차를 수행하여 mysql 서비스를 저장한 후 재시작합니다.
sudo service mysql restart
데이터베이스 SQL 파일 맨 위에 다음 행을 정의하십시오.
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
나한텐 효과가 있어.
OS X를 사용하여 컴파일된 기본값을 기반으로 Homebrew 시스템 변수에서 mysql을 설치합니다.해결책은 시스템 변수 "sql_mode"에서 "NO_ZERO_DATE"를 삭제하는 것입니다.
범위가 포함된다는 것을 명심하세요.
을 주고 는, 「 」를 사용해 ."@@session"
예를 들어 다음과 같습니다.
SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
이 경우 세션이 종료되거나 세션이 변경된 후에는 영향을 주지 않습니다.다른 세션에는 영향을 주지 않습니다.
클라이언트에 을 주고 는, 「」를 사용해 ."@@global"
예를 들어 다음과 같습니다.
SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
이 경우 변경 후 접속하는 클라이언트에만 영향을 주고(현재 모든 클라이언트에는 영향을 주지 않음) 서버가 종료되면 작동하지 않습니다.
MySQL 5.7에서도 다음 코드와 같은 문제가 있었습니다.
`update_date` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
대신 다음과 같이 수정했습니다.
`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
하려면 , 「」를 삭제할 가 있습니다.NO_ZERO_DATE
.mysql "Configuration" 에서 합니다.
- 'phpmyadmin'으로 이동합니다.
- phpmyadmin이 로드되면 '변수' 탭을 클릭합니다.
- 'sql 모드'를 검색합니다.
- [] 을 클릭하여 [편집(Edit(Edit(Edit)]를 삭제합니다.
NO_ZERO_DATE
(및 그 말미의 쉼표)를 설정으로부터 취득합니다.
이는 wamp 또는 xamp를 사용하는 로컬 환경에서 매우 일반적인 문제입니다.
Homebrew에서 MySQL을 설치하여 OS X에서 이 문제를 해결할 수 있었습니다.
brew install mysql
/usr/local/etc/my.cnf에 다음 항목을 추가합니다.
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
및 MySQL 재시작
brew tap homebrew/services
brew services restart mysql
엄격한 SQL 모드를 실행 중지하려면 다음과 같이 하십시오.
Create disable_strict_mode.cnf file at /etc/mysql/conf.d/
파일에 다음 두 줄을 입력합니다.
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
마지막으로 다음 명령으로 MySQL을 재시작합니다.
sudo service mysql restart
기본값은 1000년부터 시작해야 합니다.
예를들면,
ALTER TABLE mytable last_active DATETIME DEFAULT '1000-01-01 00:00:00'
이게 도움이 됐으면 좋겠네요.
변경:
`create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
수신처:
`create_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
이렇게 많은 답을 보게 되어 신기하지만, 아무도 "제로" 날짜 형식이 잘못되었다는 주요 이유를 명시하지 않았습니다.즉, '0000-00-00 00:00:00' 대신 '0000-01-01 00:00:00'를 사용하십시오.월 00과 일 00은 모두 유효한 값이 아닙니다.
MySQL 설정 NO_ZERO_DATE로 인해 발생한 오류라는 상위 사용자 의견에 동의합니다.이 설정은 새로운 MySQL 서버 릴리스에서 기본적으로 사용되도록 도입되었습니다.많은 개발자가 깜짝 놀랐습니다.다만, 이 설정의 주된 목적은 개발자의 생활을 어렵게 하는 것이 아니라, 낡은 테이블 구조를 수정해, 향후 이러한 잘못된 데이터 구조 형식을 사용하지 않게 하는 것입니다.
따라서 새 테이블을 만들고 "ZERO" 날짜를 지정하려면 '0000-01-01 00:00:00'를 사용하십시오.
이미 테이블을 만들었는데 이 오류가 발생한 경우(예: 기본값을 생략한 새 레코드를 삽입하는 경우) 테이블을 다음과 같이 업데이트합니다.
ALTER TABLE `erp`.`je_menus`
MODIFY COLUMN `create_date` datetime(0) NOT NULL DEFAULT '0000-01-01 00:00:00' AFTER `notes`;
전술한 서버 설정을 삭제하는 것은 일시적인 해결책일 뿐, 베스트 프랙티스의 예는 아닙니다.
서버에 대한 관리 권한이 없는 경우 현재 세션에 대해 sql 모드를 설정할 수 있습니다.
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
MySql 인스턴스의 시간대 설정을 검토할 수 있습니다.
mysql> show variables like 'time_zone';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| time_zone | SYSTEM |
+---------------+--------+
제 경우 기본 시스템의 타임존이 UTC가 아닌 BST로 설정되어 있음을 깨달았습니다.따라서 작성 테이블에서는 기본값인 1970-01 00:00:01이 1시간 뒤로 강제되어 타임스탬프 값이 비활성화되었습니다.
저는 사실 머신의 타임존을 UTC로 설정하고 싶었고, 그것이 저를 정리했습니다.Centos/7을 실행하면서 단순히
# timedatectl set-timezone UTC
모든 걸 다시 시작했어
이것을 변경할 수 있습니다.
`create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
이런 거에 대해서:
`create_date` TIMESTAMP NOT NULL DEFAULT '2018-04-01 12:00:00',
ALTER TABLE `wp_actionscheduler_actions` CHANGE `scheduled_date_gmt` `scheduled_date_gmt` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `scheduled_date_local` `scheduled_date_local` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `last_attempt_gmt` `last_attempt_gmt` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `last_attempt_local` `last_attempt_local` DATETIME NULL DEFAULT CURRENT_TIMESTAMP;
컬럼의 종류를 '타임 스탬프'로 설정하려고 하면 효과가 있습니다.
이것을 변경할 수 있습니다.
create_date
DEFAULT ' datetime NOT NULL '0000-00 00:00:00',
이런 거에 대해서:
create_date
DEFAULT ' varchar(80)는 '0000-00-00 00:00:00',
언급URL : https://stackoverflow.com/questions/9192027/invalid-default-value-for-create-date-timestamp-field
'programing' 카테고리의 다른 글
PHP로 GET 변수를 제거하는 아름다운 방법? (0) | 2023.01.01 |
---|---|
MySQL에서의 base64 부호화 (0) | 2023.01.01 |
PEP8의 E128: 시각적 들여쓰기를 위한 언더인디드 연속선이란 무엇입니까? (0) | 2023.01.01 |
jQuery Datepicker 텍스트 상자에 오늘 날짜를 미리 입력하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
Android가 선택한 라디오 버튼에서 값을 가져옵니다. (0) | 2023.01.01 |