728x90
반응형
📊 데이터베이스 COLLATION 개념
COLLATION은 데이터베이스에서 문자열의 정렬 순서와 비교 방법을 정의하는 설정입니다.
쉽게 말하면, 문자 데이터를 어떻게 비교하고 정렬할지를 결정하는 규칙입니다.
✅ 1. COLLATION의 구성 요소
COLLATION은 보통 다음과 같은 형식으로 표시됩니다:
css
[문자 집합(Character Set)]_[언어 또는 지역]_[비교 규칙]
예시:
- utf8_general_ci
- utf8mb4_unicode_ci
- latin1_swedish_ci
각 부분의 의미:
- utf8 / utf8mb4: 문자 집합 (Character Set)
- general / unicode: 비교 알고리즘 (Sorting/Comparison Rule)
- ci / cs: 대소문자 구분 설정
- ci = Case-Insensitive (대소문자 구분 없음)
- cs = Case-Sensitive (대소문자 구분함)
✅ 2. COLLATION의 주요 역할
- 문자열 비교 규칙
- 두 문자열이 같은지 비교할 때 사용.
- 예: ‘A’와 ‘a’를 같은 것으로 볼지(ci) 다르게 볼지(cs) 결정.
- 정렬 순서 결정
- ORDER BY 쿼리에서 정렬 방식에 영향을 줌.
- 예: utf8_general_ci는 A와 a를 동일하게 취급하고, B보다 앞에 정렬.
- 검색 시 동작
- LIKE나 = 비교 시 대소문자 구분 여부를 설정.
✅ 3. COLLATION 종류 및 차이
COLLATION설명대소문자 구분
utf8_general_ci | 빠른 성능, 단순 비교 | 구분 안 함 |
utf8mb4_unicode_ci | 유니코드 규칙에 따른 정확한 비교 | 구분 안 함 |
utf8_bin | 이진 비교 (바이트 단위 비교) | 구분함 |
latin1_swedish_ci | 기본 MySQL 설정 (라틴1 문자 기반) | 구분 안 함 |
- ci (Case-Insensitive): 대소문자 구분 없이 비교 ('A' = 'a')
- cs (Case-Sensitive): 대소문자 구분하여 비교 ('A' ≠ 'a')
- bin (Binary): 이진 비교로 처리 ('A'와 'a'는 바이트 값이 다름)
✅ 4. COLLATION 설정 위치
- 서버 수준: SHOW VARIABLES LIKE 'collation_server';
- 데이터베이스 수준: CREATE DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
- 테이블 수준: CREATE TABLE table_name (...) COLLATE utf8_general_ci;
- 컬럼 수준: ALTER TABLE table_name MODIFY column_name VARCHAR(100) COLLATE utf8_bin;
- 쿼리 수준: SELECT * FROM table_name ORDER BY column_name COLLATE utf8_bin;
🚩 5. COLLATION 변경 방법
(1) 데이터베이스의 COLLATION 변경
ALTER DATABASE db_name COLLATE utf8mb4_unicode_ci;
(2) 테이블의 COLLATION 변경
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(3) 컬럼의 COLLATION 변경
ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
✅ 6. COLLATION 선택 시 고려 사항
- 성능 vs 정확성:
- utf8_general_ci는 빠르지만, 복잡한 문자 비교에는 정확하지 않을 수 있음.
- utf8mb4_unicode_ci는 정확하지만 성능이 약간 느릴 수 있음.
- 대소문자 구분 필요 여부:
- 대소문자 구분이 필요한 경우 cs 또는 bin 사용.
- 다국어 지원:
- 전 세계 언어를 지원하려면 utf8mb4_unicode_ci 또는 utf8mb4_0900_ai_ci 추천.
🎯 7. 실전 예제
(1) 대소문자 구분 없이 검색 (ci 사용)
SELECT * FROM users WHERE name = 'Alice'; -- 'alice', 'ALICE' 모두 검색됨 (utf8_general_ci 사용 시)
(2) 대소문자 구분하여 검색 (cs 사용)
SELECT * FROM users WHERE name COLLATE utf8_general_cs = 'Alice'; -- 'Alice'만 검색됨, 'alice'는 검색되지 않음
(3) 정렬 기준 비교
SELECT name FROM users ORDER BY name COLLATE utf8_bin; -- 정확한 이진 순서로 정렬 ('A'와 'a'를 구분)
🔑 8. 정리
- COLLATION은 데이터베이스에서 문자열 비교와 정렬 방식을 정의하는 규칙입니다.
- 대소문자 구분(ci, cs), 이진 비교(bin), 유니코드 호환성 등 다양한 옵션이 있습니다.
- 정확성이 중요하면 utf8mb4_unicode_ci, 성능이 중요하면 utf8_general_ci를 사용하세요.
300x250
반응형
'IT > DB' 카테고리의 다른 글
MYSQL 데이터 import 오류 TypeError: sequence item 0: expected string, NoneType foundERROR: Import data file: sequence item 0: expected string, NoneType foundFailed (0) | 2025.02.15 |
---|---|
select count(*) 이랑 select count(1) 차이는? (0) | 2025.02.14 |
mysql Error Code: 1046 해결 방법 (0) | 2025.02.06 |
sql 쿼리에서 데이터가 'com.' 으로 시작하는 값 조회하는 쿼리는? (0) | 2025.02.06 |
쿼리 sum(if 함수로 count 건수 구하는 방법? (0) | 2025.01.28 |