상세 컨텐츠

본문 제목

Zerodate(0000-00-00 00:00:00)가 default인 column이 있는 테이블에서 컬럼 추가 및 속성 변경을 할 때 방법

MySQL

by 별의아이☆ 2019. 7. 17. 11:07

본문

Zerodate가 default인 column 즉

..... default "0000-00-00 00:00:00" 이런식의 0000 ... 이 기본 값이고 속성은 DATETIME 또는 DATE인 컬럼이 있을 때 이런 column이 존재하는 테이블에서는 컬럼의 속성변경이나 컬럼 추가(ALTER TABLE)시에 오류가 발생한다.

 

오류 1067 (42000) : ‘registerDate’에 대한 잘못된 기본값

이 오류는 MySQL 5.65 이상의 버전 그리고 MariaDB 에서 발생한다.

 

이런 컬럼이 하나만 있을 때는 해당 컬럼의 기본값을 없애서나 현재 날짜로 바꾸거나 할 수 있지만 특정 사이트의 커스텀을 할 때 기본동작에 아무 액션을 안줬다면 상관 없지만 이 기본 동작에 어떤 의도에 의해 0000-00-00 라는 값이 있으면 기본 동작을 해라 라는 명령어를 추가해 놓은 상태라면 문제가 된다.

예) if($row['confirm_date'] == '0000-00-00  00:00:00') { $a = $bar; } else { $a = $foo; }

만약 이런식으로 동작값이 개발되어 있는 상태라면 이 기본 값을 없애거나 바꾸면 동작을 안하게 되므로 이럴 땐 가장 골치 아픈 상황이 된다.

이 기본 값을 건드리지 않고 컬럼 수정 및 추가의 방법을 소개하고자 한다.

 

그누보드의 경우 zerodate를 많이 사용하는데 이걸 커스텀하는 의뢰가 있어 방법을 찾다가 알게 된 방법이었다.

 

이슈 : 회원 가입시 주소를 해외에서 영어로 받게 해주세요.

 

이 이슈를 해셜하기 위해 우편번호 자동 입력 기능을 먼저 제거하였다.

주소 입력내용중 지번 주소는 사용하지 않기로 하였다.

기본 필드의 mb_addr1, mb_addr2 는 그대로 사용.

mb_addr1 사용 용도는 address 1

mb_addr2 사용 용도는 address 2

mb_addr3는 원래 추가사항 이었으나 사용 용도를 City 입력란으로 하였다.

mb_addr_jibun 컬럼을 사용할까 하였으나 이건 사용하지 않기로 하고 mb_addr4 컬럼을 추가

mb_addr4 사용 용도는 State/Provinve/Region 로 사용

mb_addr_country 컬럼을 추가 country 셀렉트박스로 사용할 계획을 세웠다.

 

ALTER TABLE `g5_member`  ADD `mb_addr4` VARCHAR(255) NOT NULL  AFTER `mb_addr3`;

ALTER TABLE `g5_member`  ADD `mb_addr_country` VARCHAR(255) NOT NULL  AFTER `mb_addr4`;

 

위와 같이 하면 그냥 되는줄 알았으나 오류 발생.

구글링 해본 결과 방법은 ALTER TABLE 하기 전에 두줄만 추가해주면 된다는 거였다.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 

SET time_zone = "+00:00";

ALTER TABLE `g5_member`  ADD `mb_addr4` VARCHAR(255) NOT NULL  AFTER `mb_addr3`;

ALTER TABLE `g5_member`  ADD `mb_addr_country` VARCHAR(255) NOT NULL  AFTER `mb_addr4`;

 

결과는 성공