sql_mode 옵션은 SQL의 작성과 결과에 영향을 미치는 옵션이다.
설정보는 법
show variables like 'sql_mode'
설정하는 법
my.cnf (unix 기준) 파일에 sql_mode="XXXXX,YYYY"와 같이 적어줄 수 있다.
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES"
Dynamic 옵션이기 때문에 실행 중에도 넣어줄 수 있다. Global, Session 둘다 존재하는 옵션이다.
SET sql_mode = 'TRADITIONAL';
옵션과 의미
- STRICT_ALL_TABLES : 일반적으로 MySQL에서는 저장하려는 값의 길이가 칼럼의 길이보다 더 긴 경우라 하더라도 에러가 발생하지 않고, 칼럼의 길이를 초과하는 부분은 버리고 남은 부분만 저장한다. (경고 메시지 발생)
이 옵션을 주면, 칼럼의 정해진 길이보다 큰 값을 저장할때 경고가 아닌 에러를 발생시킨다. - STRICT_TRANS_TABLES : MySQL 서버는 칼럼의 타입과 호환되지 않는 값을 저장할때 최대한 바꿔서 저장한다.
이 옵션을 주면, 원하지 않는 데이터 타입의 변환이 필요할때 에러를 발생시킨다. - ANSI_QUOTES : 홀따옴표만 문자열 값 표기로 사용할 수 있고, 쌍따옴표는 칼럼명이나 테이블명과 같은 식별자를 표기하는 데만 사용할 수 있다.
- ONLY_FULL_GROUP_BY : GROUP BY 절에 포함되지 않은 칼럼을 집합함수로 감싸야만 사용할 수 있게 해준다.
- PAD_CHAR_TO_FULL_LENGTH : CHAR 타입의 칼럼값을 가져오는 경우, 뒤쪽의 공백이 제거되지 않고 반환되도록 한다.
- IGNORE_SPACE : 프로시저나 함수명과 괄호 사이의 공백을 무시한다.
- ANSI : 위에서 언급된 여러 옵션을 조합해 MySQL 서버가 최대한 SQL 표준에 맞게 동작하게 만들어준다.
'개발 공부 기록하기 > 02. DB & SQL' 카테고리의 다른 글
JOIN 쿼리 튜닝 (0) | 2020.08.26 |
---|---|
GROUP BY, ORDER BY 인덱스 튜닝 (0) | 2020.08.25 |
내맘대로 정리하는 Real MySQL #10장) 파티션 (0) | 2020.08.22 |
내맘대로 정리하는 Real MySQL #6장) 실행계획 - MySQL 쿼리 동작 방식 편 (0) | 2020.08.21 |
내맘대로 정리하는 Real MySQL #6장) 실행계획 - 실행계획 읽기 편 (0) | 2020.08.19 |