
--sql_mode의 기본값은 MySQL 버전에 따라 다르지만, MySQL 8.0부터는 NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO, NO_ENGINE_SUBSTITUTION이 기본값입니다.
각 모드의 의미는 다음과 같습니다.
- ONLY_FULL_GROUP_BY: GROUP BY 절에 지정된 열이 SELECT 절에 포함되지 않은 경우 오류를 반환합니다.
- STRICT_TRANS_TABLES: 데이터가 INSERT, UPDATE, REPLACE, DELETE 연산에서 잘못된 형식으로 저장되면 오류를 반환합니다.
- STRICT_ALL_TABLES: 데이터가 INSERT, UPDATE, REPLACE, DELETE 연산에서 잘못된 형식으로 저장되면 오류를 반환합니다.
- NO_ZERO_IN_DATE: 날짜가 0일이거나 0월인 경우 오류를 반환합니다.
- NO_ZERO_DATE: 날짜가 0일이거나 0월인 경우 오류를 반환합니다.
- ERROR_FOR_DIVISION_BY_ZERO: 나누기 연산에서 0으로 나누는 경우 오류를 반환합니다.
- NO_AUTO_CREATE_USER: CREATE USER 문에서 자동으로 사용자를 생성하지 않습니다.
- NO_AUTO_VALUE_ON_ZERO: AUTO_INCREMENT 열에 0을 삽입하면 오류를 반환합니다.
- NO_ENGINE_SUBSTITUTION: ENGINE이 없거나 지원되지 않는 경우 오류를 반환합니다.
--sql_mode의 기본값을 변경하는 방법은 다음과 같습니다.
- MySQL 8.0 이전 버전: SET GLOBAL sql_mode = '모드1, 모드2, 모드3';
- MySQL 8.0 이후 버전: SET GLOBAL sql_mode = '모드1, 모드2, 모드3'; 또는 SET sql_mode = '모드1, 모드2, 모드3';
각 모드를 활성화/비활성화하는 방법은 다음과 같습니다.
- 모드를 활성화: SET GLOBAL sql_mode = '모드1, 모드2, 모드3';
- 모드를 비활성화: SET GLOBAL sql_mode = '모드1, 모드2, 모드3' - 모드;
예를 들어, ONLY_FULL_GROUP_BY 모드를 비활성화하려면 다음과 같이합니다.
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY';
데이터베이스의 동작이 어떻게 달라지는지는 다음과 같습니다.
- ONLY_FULL_GROUP_BY 모드를 비활성화하면 GROUP BY 절에 지정된 열이 SELECT 절에 포함되지 않은 경우 오류를 반환하지 않습니다.
- STRICT_TRANS_TABLES 모드를 비활성화하면 데이터가 INSERT, UPDATE, REPLACE, DELETE 연산에서 잘못된 형식으로 저장되면 오류를 반환하지 않습니다.
- NO_ZERO_IN_DATE 모드를 비활성화하면 날짜가 0일이거나 0월인 경우 오류를 반환하지 않습니다.
- NO_ZERO_DATE 모드를 비활성화하면 날짜가 0일이거나 0월인 경우 오류를 반환하지 않습니다.
- ERROR_FOR_DIVISION_BY_ZERO 모드를 비활성화하면 나누기 연산에서 0으로 나누는 경우 오류를 반환하지 않습니다.
이러한 모드 변경은 데이터베이스의 동작을 수정할 수 있으므로, 주의하여 변경해야 합니다.
2025-05-01 14:40