일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- elasticsearch
- 자바
- 한글 깨짐
- Excel
- HTML
- 엑셀
- jQuery
- Java
- eclipse utf8
- 자바스크립트
- 이클립스 설정
- eclipse 설정
- 데이터베이스
- JavaScript
- 이클립스
- 형변환
- MySQL
- 쿼리
- JSP
- 자바 리스트
- spring form
- 엘라스틱서치
- 에러
- java 오류
- 제이쿼리
- tomcat
- db
- spring 오류
- Eclipse
- Today
- Total
개발노트
[MySQL] SQL 모드 (sql_mode)와 클라이언트별 설정 방법 본문
MySQL에서 SQL 모드 (sql_mode)는 서버가 SQL 쿼리를 처리하는 방식을 제어하는 중요한 시스템 변수입니다. 이를 통해 데이터 입력의 유효성 검사, 그룹화 규칙, 날짜 형식 처리 등 다양한 SQL 동작을 세부적으로 설정할 수 있습니다.
SQL 모드란?
SQL 모드는 MySQL 서버가 SQL 명령을 해석하고 실행하는 방식을 정의합니다. 이를 통해 데이터의 유효성 검사와 처리 방식을 세부적으로 조정할 수 있습니다. 예를 들어, 잘못된 데이터 입력을 엄격하게 막거나, 특정 형식의 데이터를 허용하지 않도록 설정할 수 있습니다.
주요 SQL 모드 종류
- STRICT_TRANS_TABLES: 잘못된 데이터 입력 시 오류를 발생시켜, 트랜잭션이 롤백되도록 합니다.
- NO_ZERO_IN_DATE: '0000-00-00'과 같은 날짜 값을 허용하지 않습니다.
- ONLY_FULL_GROUP_BY: GROUP BY 문에 포함되지 않은 컬럼을 SELECT 할 수 없도록 합니다.
- ANSI_QUOTES: 쌍따옴표를 식별자(identifier)로 사용하도록 합니다.
서버 전체 SQL 모드 설정
1. 서버에 설정된 모드 확인
show variables like 'sql_mode'
또는
select @@sql_mode;
2. 모드 변경
1) 현재 연결된 세션에서만 모드 변경
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
2) 영구적으로 모드 변경
MySQL을 사용하는 시스템에서 MySQL을 설정 파일을 변경해야 합니다.
Windows | 설정 파일 이름 | my.ini |
기본 위치 |
|
|
Mac | 설정 파일 이름 | my.cnf |
기본 위치 |
|
|
Linux | 설정 파일 이름 | my.cnf |
기본 위치 |
|
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY"
클라이언트별 SQL 모드 설정
MySQL에서 "클라이언트"는 데이터베이스 서버에 연결하여 쿼리를 실행하는 프로그램 또는 사용자를 의미합니다.
(Ex : 데이터베이스 관리 도구 (DBeaver, HeidiSQl 등), 응용프로그램(웹 애플리케이션, 모바일 등))
클라이언트는 MySQL 서버에 요청을 보내고, 서버는 그 요청을 처리하여 결과를 반환합니다.
1. 서버의 기본 SQL 모드 확인
SELECT @@GLOBAL.sql_mode;
2. 서버의 기본 SQL 모드 설정 (관리자 권한 필요)
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY';
3. 클라이언트 세션의 SQL 모드 확인
SELECT @@SESSION.sql_mode;
4. 클라이언트 세션의 SQL 모드 설정 (현재 세션에 대한 설정)
SET SESSION sql_mode = 'ANSI_QUOTES,PAD_CHAR_TO_FULL_LENGTH';
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-setting
'Programming > Database' 카테고리의 다른 글
명세서 작성시 유용한 쿼리문 (0) | 2024.10.29 |
---|---|
테이블 및 컬럼 찾기 (0) | 2023.01.08 |
JDBC 드라이버 로딩 및 Connection 생성 (0) | 2022.02.08 |
SQL 함수 (0) | 2020.04.27 |
UNION / INTERSECT / MINUS (0) | 2020.04.27 |