본문 바로가기

DATABASE

[MYSQL 5.x ]1364 : Field 'list_order' doesn't have a default value

 

참고로 일반적으로 Linux OS에서 my.cnf 파일은 /etc/my.cnf 라고 해 놓고 사용한다.

[출처] [CentOS_MySQL_trouble] 1364 : Field '열 이름' doesn't have a default value|작성자 jeongppappa

LastUpdate : <2014.08.11>

Test Environment
CentOS 5.x 32bit
MySQL 5.6.x

Red : 강조
Blue : 명령어 & 메뉴이동
Green : 주석
Pink : 변수
Purple : 예시
Orange : 출력&편집&소스

* Incident

1364 : Field 'pw_update_yn' doesn't have a default value

사이트 이전 후 글 등록 시 위와 같이 에러 발생

* Resolution

MySQL 5.x 에서는 필드를 만들 때 not null로 설정 시 default 값에 아무것도 입력하지 않을 경우 자동으로 빈값 '' 셋팅이 안된다.
그래서 insert 질의를 할 때 default 값이 없는 필드를 무시하고 넘기는데, 이러한 경우 위와 같은 에러가 발생한다.

인터넷 검색 시 my.cnf 파일에서 sql-mode를 주석처리하라고 하는데, 운영되고 있는 서버에서는
그러한 부분이 없으며, MySQL에서 sql_mode 값을 다음과 같이 수정하여 해결 하였다.

1. sql_mode 확인
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

1 row in set (0.00 sec)

2. sql_mode 변경 및 확인
mysql> SET @@GLOBAL.sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)
 
※ 빈값 '' 으로 넣어줘도 될 것 같긴 한데, 확인을 안해봤다.

* Reference

해당없음.