MySQL 8.0 타임스탬프로 인해 발생한 문제 공유의 예

풀어 주다: 2022-01-17 15:44:33
앞으로
2446명이 탐색했습니다.

이 기사는 MySQL의 필드 기본값과 관련하여 발생할 수 있는 몇 가지 관련 문제를 소개합니다. 도움이 되기를 바랍니다.

MySQL 8.0 타임스탬프로 인해 발생한 문제 공유의 예

오늘 비즈니스에서 문제를 보고했습니다. 수정 시간 필드는 null이 허용되지 않으며 비즈니스 피드백 필드는 기본값으로 설정됩니다.

MySQL 8.0 타임스탬프로 인해 발생한 문제 공유의 예

From 오류 메시지, Modify_time 필드에 기본값이 설정되어 있지 않거나 기본값이 잘못 설정되었을 수 있습니다. 다음으로 테이블 구조를 확인하세요.

CREATE TABLE `jj_xxxx` (
....
  `create_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00' ,
  `update_user` int DEFAULT NULL,
  `modify_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00',
 ....
  PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4893 DEFAULT CHARSET=utf8 COMMENT='xxxxx'
로그인 후 복사

테이블 구조로 보면 기본값에는 문제가 없는 것 같습니다. sql_mode 매개변수 설정을 확인해보세요.

비즈니스 직원이 온라인 테이블도 이렇다고 하는데 온라인에서는 정상이므로 이제 이 비즈니스를 다른 비즈니스로 마이그레이션해야 합니다. 환경에서 데이터베이스로의 또 다른 환경 세트입니다.

갑자기 마이그레이션을 위한 새로운 환경은 MySQL 버전 8.0이고 기본값은 5.7입니다. 두 버전의licit_defaults_for_timestamp 매개변수가 다릅니다.

이유:

explicit_defaults_for_timestamp 시스템 변수 MySQL 서버가 타임스탬프 열의 기본값과 NULL 값을 처리하는 방법을 결정합니다.

이 변수는 MySQL 버전 5.6.6부터 도입되었으며, 전역 수준과 세션 수준으로 구분되며 기본값은 OFF입니다.

8.0에서는 기본값이 on

explicit_defaults_for_timestamp=OFF로 변경되었습니다. 이는 기본 타임스탬프 기본 형식을 사용한다는 의미입니다. 타임스탬프 유형의 기본 형식은 무엇입니까?

1. 이 필드는 기본값이 null이 아니며 기본 null 설정은 허용되지 않습니다.

2. 기본값 또는 업데이트 속성이 강제로 설정되지 않은 경우. 지정하면 기본값은 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP로 설정됩니다.

3. 첫 번째 열이 아닌 타임스탬프 필드에 기본값을 지정하도록 강제하지 않은 경우 DEFAULT '0000-00-00 00:00:00'

4. 이 열에 null 값을 삽입하면 자동으로 변환됩니다.

explicit_defaults_for_timestamp=ON으로 설정한 다음 타임스탬프 기본값 기능을 끕니다.

1. null이 명시적으로 지정되지 않은 경우 기본값은

2입니다. CURRENT_TIMESTAMP 대신 null;

3. null이 아닌 속성이 지정되고 이 필드의 값이 삽입 메소드에 지정되지 않으면 엄격한 sql_mode에서 오류가 보고됩니다. 엄격하지 않은 sql_mode 아래에 '0000-00-00 00:00:00'을 삽입하세요.

다음 시나리오를 신중하게 고려해야 합니다.

1 타임스탬프가 null이 아닌 기본 CURRENT_TIMESTAMP(explicit_defaults_for_timestamp가 0에서 변경될 때 발생) to 1 비즈니스에 미치는 영향은 무엇입니까?

타임스탬프 필드에 기본값이 있는 경우 이러한 변환으로 인해 타임스탬프 필드 값이 null인 원래 삽입 문이 실패하여 비즈니스에 영향을 미칩니다.

2. 날짜/시간 기본값을 타임스탬프 기본값 CURRENT_TIMESTAMP로 변환합니다. 비즈니스에 어떤 영향을 미칠까요?

이러한 필드 변환을 수행하면 필드의 원래 null 값이 모두 CURRENT_TIMESTAMP로 변환됩니다. 과거 데이터가 많은 경우 이러한 변환은 리소스를 많이 소모하게 됩니다. 동시에 가치 변화가 비즈니스에 미치는 영향도 고려해야 합니다.

추천 학습:

mysql 비디오 튜토리얼

위 내용은 MySQL 8.0 타임스탬프로 인해 발생한 문제 공유의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:Mysql技术公众号
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!