티스토리 뷰

MySQL

MySQL의 default에 대한 simple한 사실.

니플하임_ 2007.03.23 13:12
mysql> create table cc( a varchar(1), b timestamp default now() );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into cc (a) values (1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from cc;
+------+---------------------+
| a    | b                   |
+------+---------------------+
| 1    | 2007-03-23 10:44:36 |
+------+---------------------+
1 row in set (0.00 sec)

mysql> update cc set a = 2 where a =1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from cc;
+------+---------------------+
| a    | b                   |
+------+---------------------+
| 2    | 2007-03-23 10:44:36 |
+------+---------------------+
1 row in set (0.00 sec)

4.1버젼에서는 datetime 타입을 사용하여 default now()를 셋팅하면
아래와 같은 에러메세지를 보게 될 것이다.

'ERROR 1067 (42000): 'b'의 유효하지 않은 디폴트 값을 사용하였습니다.'

하지만 datetime 타입을 사용하지 않고, timestamp 타입을 이용하여 간단히
셋팅할 수 있다.

헌데 5.x standard 버젼에서 default now()가 셋팅되는 경우가 있었다.
이 경우, 해당 컬럼을 제외하고 타 컬럼을 update해도,
b 값이 now() 값으로 update시마다 다시 업뎃이 되는 문제가 있다.
(이것을 문제라고 봐야하나;)

아무튼, regdate(최초 등록시기)와 같은 기존의 값을 보존하기 위해서는
now()를 어플리케이션 단에서 셋팅해주어야 하는 문제가 있다.

재미있다. ㅋㅋ 구멍많은 MySQL.
댓글
댓글쓰기 폼