개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.01 14:39

SQL 모드 (--sql_mode) 설정에 대한 질문

목록
  • 취약점사냥꾼 2일 전 2025.05.01 14:39
  • 6
    1
제가 공부하고 있는 MySQL에서 --sql_mode 옵션을 사용하여 데이터베이스의 동작을 수정할 수 있는 것을 알게되었습니다.

하지만, --sql_mode의 기본값이 무엇인지, 각 모드의 의미와 사용방법에 대한 정확한 정보를 찾지 못했습니다.

--sql_mode의 기본값을 변경하는 방법과, 각 모드를 활성화/비활성화하는 방법을 알려주시면 감사하겠습니다.

또한, --sql_mode을 변경한 후에 데이터베이스의 동작이 어떻게 달라지는지 알려주시면 도움이 될 것 같습니다.

    댓글목록

    profile_image
    나우호스팅  2일 전



    --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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 16,293건 / 28 페이지

검색

게시물 검색