본문 바로가기
Dev/DataBase

MySQL/MariaDB SQL_MODE 설정

by nakanara 2022. 4. 6.
반응형

 

SQL_MODE

오라클에 비해 Mysql/MariaDB의 경우 문법이 틀려도 암묵적으로 처리해주는 것 때문에 개발할 때 오류는 발생하지 않았지만 추후에 문제가 발생하는 경우가 많았다.

오류를 최대한 줄이고자 SQL_MODE를 설정하여 사용하였다.

sql_mode="ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,PIPES_AS_CONCAT"

 

Options

  • ERROR_FOR_DIVISION_BY_ZERO: 활성화 시 MOD(N, 0) 0으로 나눌 경우 NULL값이 되며, 경고 발생, 활성화되지 않은 경우 NULL 값 생성, 비 활성화 시 경고 미 발생합니다. 엄격 모드를 적용할 경우 오류가 발생합니다.(향후 엄격 모드에 통합 예정)
  • NO_ENGINE_SUBSTITUTION: CREATE TABLE 비활성화되거나, ALTER TABLE이 컴파일되지 않은 스토리지 엔진과 같은 명령문의 경우 기본 스토리지 엔진으로 대체되어 제어됩니다.
  • ONLY_FULL_GROUP_BY: HAVING 목록, 조건 또는 ORDER BY 절에 명명되지 않은 열이 존재하는 경우 오류 발생
  • STRICT_TRANS_TABLES: 트랜잭션 스토리지 엔진에 엄격한 SQL모드 활성화
  • NO_ZERO_DATE: '0000-00-00' 입력 시 경고, 비활성화 시 해당 값이 입력됩니다.
  • NO_ZERO_IN_DATE: 연도 부분이 0은 아니지만 월, 일 부분이 0인 경우 허용 여부(향후 제외 예정)
  • PIPES_AS_CONCAT: 문자열 연결 연산자를 || 오라클과 동일하게 사용하기 위한 편의성
  • ALLOW_INVALID_DATES: 날짜 전체 확인이 아닌 월(1~12) 일(1~31) 범위 검증
  • ANSI_QUOTES: " 문자열 인용 문자가 아닌 식별자로 취급
  • IGNORE_SPACE: 함수 이름과 실행문 사이 공백 허용 select count (1) from dual -- 오류
  • NO_AUTO_VALUE_ON_ZERO: NULL을 열에 삽입하여 다음 시퀀스 번호를 생성하지만, 해당 옵션 활성화가 된 경우 시퀀스 번호를 사용하지 않음, 덤프 파일을 로드할 경우 해당 옵션 활성화
  • NO_BACKSLASH_ESCAPES: 백 슬래스 문자()를 문자열 및 식별자에서 이스케이프 문자로 사용 불가
  • NO_UNSIGNED_SUBTRACTION: TYPE이 UNSIGNED일 경우 결과가 음수가 나오는 경우 오류 발생, 해당 옵션 활성화된 경우 음수로 표시
  • STRICT_ALL_TABLES: 모든 스토리지 엔진에 대해 엄격한 SQL 모드 활성화
  • TIME_TRUNCATE_FRACTIONAL: 소수 자릿수가 더 적은 열에 값을 입력할 때 반올림 처리가 되어 실제 값과 다른 경우 발생, 옵션 활성화 시 값을 길이만큼 잘림 처리

참고

반응형