mysql 5.x 의 기본 모드는 Strict Mode 이며, sql_mode가 별도로 설정되어 있지 않다.

mysql> show variables like '%mode%';
+-----------------+--------+
| Variable_name   | Value  |
+-----------------+--------+
| slave_exec_mode | STRICT |
| sql_mode        |        |
+-----------------+--------+
2 rows in set (0.00 sec)

아래와 같이 test_notnull2 테이블에 bbs_id, bbs_name 컬럼에 not null로 설정하고,
bbs_name 컬럼에만 값을 삽입시 에러가 발생하지 않는다.

에러가 발생하지 않는것은 bbs_id 의 값을 입력하지 않으면,
NULL 값이 삽입되는 것이 아니라 ''값이 입력되기 때문에 쿼리가 정상 실행된다.

mysql> create table test_notnull2(bbs_id varchar(10) not null, bbs_name varchar(10) not null);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test_notnull2(bbs_name) values('test');
Query OK, 1 row affected, 1 warning (0.00 sec)

에러를 발생시키고 싶다면, my.cnf 파일의 mysqld 섹션에 아래와 같이 설정해 주면 된다.
STRICT_TRANS_TABLES 이 설정에 의해 에러를 뿌려줄 것이다.

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

설정을 변경하고 나서 똑같이 쿼리 사용시 아래와 같이 에러가 발생한 것을 확인할 수 있다.
STRICT_TRANS_TABLES 이 설정은 컬럼에 값을 넣을때 컬럼의 길이보다 클 경우 자동으로 잘라서 넣어주고
경고를 뿌려줬는데 , 5.x 버전부터는 에러를 발생시킨다.

mysql> insert into test_notnull2(bbs_name) values('test');
ERROR 1364 (HY000): Field 'bbs_id' doesn't have a default value

2012/08/02 10:25 2012/08/02 10:25

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다