>  기사  >  데이터 베이스  >  mysql 필드 시간 유형 타임스탬프 정보 기본값은 현재 시간입니다.

mysql 필드 시간 유형 타임스탬프 정보 기본값은 현재 시간입니다.

高洛峰
高洛峰원래의
2016-11-05 17:00:041165검색

오늘 AWS에 애플리케이션을 배포했는데, 백그라운드 수정 내용을 제출한 후 프로그램에서 오류를 보고한 것을 발견했습니다. 조사 결과, 데이터 업데이트 시 한 데이터 테이블의 타임스탬프 유형 필드의 기본값이 변경된 것으로 나타났습니다. "0000-00-00. 00:00:00.000000" 형식으로 변환하여 구문 분석에 실패했습니다.

mysql에서 이 필드의 생성 구문은 다음과 같습니다

`XXX` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 일반적으로 현재 데이터 변경 형식

로컬 개발 환경에서 테스트했기 때문에 그런 문제는 없으며, 애플리케이션 환경도 동일하게 유지되고 있는 점은 프로덕션 환경의 데이터베이스가 mysql을 사용한다는 점이다. AWS RDS의 오류 정보를 검색한 결과 mysql 매개변수 구성에 문제가 있는 것으로 보입니다.

공식 mysql 문서 읽기

둘 다 명시적으로 지정되지 않은 경우 기본적으로 첫 번째 TIMESTAMP 열에는 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP가 모두 포함됩니다.

이것은 우리가 원하는 것이 아닐 때가 많습니다. 어떻게 비활성화할 수 있나요?

1. "explicit_defaults_for_timestamp" 값을 ON으로 설정하세요. 2> 열에 NULL 속성을 지정합니다.

개발환경에서explicit_defaults_for_timestamp 값이 OFF임

RDS에서 mysql의 파라미터를 비교해보니 이 파라미터의 값이 기본값이 0이기 때문에 rds에서 mysql의 파라미터 그룹은 수정이 허용되지 않기 때문에 파라미터 그룹을 생성하면 기본 파라미터 그룹이 상속받게 되는데 이때는 여기서 0과 1이 어떻게 on과 off에 해당하는지 몰랐기 때문에 값을 1로 변경했습니다. 그런 다음 rds를 다시 시작합니다.

mysql> show variables like '%explicit_defaults_for_timestamp%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
row in set (0.00 sec)
이번에는 더 이상 오류가 발생하지 않습니다.

rds에서 mysql의 매개 변수를 다음 상황으로 변경하면 완벽한 솔루션입니다.


explicit_defaults_for_timestamp = 1



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.