MySQL 5.6 SQL STRICT 모드 변경 방법

| 2016년 1월 28일 | 0 Comments

MySQL 5.x 버전에서는  SQL 모드의 기본 값이 strict mode 모드 입니다

MySQL 버전을 상위버전으로 업그레이드 할 경우 NULL 값으로 인하여 오류가 생기는 문제가 많이 발생을 합니다

 

STRICT 모드에 따라서 어떤문제가 발생하는 가는 아래 예제를 참고

예) SMILE 컬럼에 NOT NULL 속성이 포함되어 있다

STRICT 모드 : SMILE 컬럼에 꼭 값이 입력되어야 함

STRICT 모드 비활성화 : SMILE 컬럼에 값이 공백 또는 NULL 값으로 해도 데이터가 입력이 된다

 

SQL 모드의 종류는 mysql 홈페이지 url을 참고 하시면 됩니다

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

 

  1. SQL 모드 확인

5.6 버전은 기본값이 STRICT 모드가 활성화 되어 있다

mysql> SELECT @@global.sql_mode;
+——————————————–+
| @@global.sql_mode |
+——————————————–+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+——————————————–+
1 row in set (0.00 sec)

mysql>

 

2 .데이터 입력 테스트

컬럼속성을 NOT NULL 로 생성

mysql> create table test (no int(10) unsigned not null AUTO_INCREMENT primarykey);
Query OK, 0 rows affected (0.04 sec)

+——-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+——————+——+—–+———+—————-+
| no | int(10) unsigned | NO | PRI | NULL | auto_increment |
+——-+——————+——+—–+———+—————-+
1 row in set (0.00 sec)

 

  • INSERT

mysql> INSERT INTO SMILE.`test` (`no`) VALUES (‘1’);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO SMILE.`test` (`no`) VALUES (”);
ERROR 1366 (HY000): Incorrect integer value: ” for column ‘no’ at row 1

값을 입력할경우 정상적으로 입력이 되지만 NULL 또는 값을 입력하지 않을 경우에는 입력이 안된다

 

  • STRITC 모드로 변경

/etc/my.cnf

/usr/local/mysq/my.cnf 파일 2개를 변경해야 적용됨 (해당 파일은설치 경로에 따라서 다릅니다)

sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
라는 구문을 찾아서
#sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”  로 변경

 

 

  • 모드 변경 환인

mysql> SELECT @@global.sql_mode;
+————————+
| @@global.sql_mode |
+————————+
| NO_ENGINE_SUBSTITUTION |
+————————+
1 row in set (0.00 sec)

 

  • 모드 변경 후 데이터 INSERT

mysql> INSERT INTO SMILE.`test` (`no`) VALUES (”);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO SMILE.`test` (`no`) VALUES (NULL);
Query OK, 1 row affected (0.00 sec)

STRICT 모드를 비활성화 한 후 데이터가 없거나, NULL 값으로 입력을 해도 정상적으로 데이터가

입력되는걸 확인할 수 있다

mysql> select * from test;
+—-+
| no |
+—-+
| 1 |
| 2 |
| 3 |
| 4 |
+—-+

 

최신 버전을 사용할 경웨 위의 문제로인하여 데이터베이스 값을 입력시 오류가 발생 할 수 있으니

참고하시면 되겠습니다

Tags: , , , , , , ,

Category: LINUX

About the Author ()