개발 공부 기록하기/02. DB & SQL

MySQL sql_mode 설정과 옵션

lannstark 2020. 8. 24. 20:49

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 표준에 맞게 동작하게 만들어준다.