이 기사는 MySQL의 필드 기본값과 관련하여 발생할 수 있는 몇 가지 관련 문제를 소개합니다. 도움이 되기를 바랍니다.
오늘 비즈니스에서 문제를 보고했습니다. 수정 시간 필드는 null이 허용되지 않으며 비즈니스 피드백 필드는 기본값으로 설정됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!