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`;
결과는 성공