Charset
문자를 표현하기 위해 각 문자를 정수값에 대응시켜 놓은 체계. 글자나 기호들의 집합을 정의한 것으로, 인코딩의 집합이자 문자 데이터에 대한 저장공간 크기의 정의이다. 문자가 깨지거나 이상한 값으로 저장되는 경우, 해당 Charset에 정의(지원)되지 않은 문자 데이터를 저장했기 때문이다.
말하자면 Charset은 컴퓨터와 정의한 암호표이다. 데이터를 메모리에 저장을 할 때는 이진수의 숫자값으로 저장하게 되는데, 문자를 어떤 숫자로 정의할 것인지(인코딩), 그리고 숫자값을 문자화 시킬 때 데이터를 얼만큼의 크기로 읽어서 어떤 문자로 변환할 것인지(디코딩)를 정하는 데에 사용되는 암호표가 Charset이라고 할 수 있다.
DB에서 주로 사용하는 Charset은 latin1, euckr, utf8(utf8mb3), utf8mb4 등이 있다.
Collation
정해져 있는 Charset의 인코딩을 기반으로 글자끼리 어떤 방식으로 비교해서 정렬할 지에 대한 정렬 규칙이다. 동일한 문자에 대해 어떻게 비교할지, 검색 시 어떤 결과를 줄 지, 문자열 함수의 결과값 등에 영향을 미친다. collation의 명칭은 charset과 collation algorithm version 정보, 접미사 등으로 이루어져있다.
- Collation Algorithm
- 문자열 값을 비교하고 순서화하는 방법
- IDENTITY 조합 : 값의 단순 2진 비교
- 언어 인식 조합 : Db2 데이터베이스가 비유니코드 데이터베이스에 사용하는 가중치 테이블을 기반으로 비교
- 로케일 구분 UCA 기반 조합 : 전체 Unicode Collation Algorithm 스펙을 기반으로 비교 (전체 문화적 정확성을 제공)
- 접미사
옵션 | 설명 |
_ai | Accent-insensitive (악센트 구분하지 않음) |
_as | Accent-sensitive (악센트 구분함) |
_ci | Case-insensitive (대소문자 구분하지 않음) |
_cs | Case-sensitive (대소문자 구분함) |
_ks | Kana-sensitive(일본어 히라가나/가타가나 구분) |
_bin | Binary (이진 정렬) |
utf8mb4
UTF-8은 4바이트의 인코딩이다.
이전의 MySQL과 MariaDB(MySQL에서 파생됨)은 utf8(=utf8mb3) Charset에서 3바이트만으로도 전 세계 모든 언어 문자를 표현할 수 있다고 생각하여 공간 절약과 속도 향상을 위해 utf8을 3바이트 가변 자료형으로 설계하였다.
그러나 최근 Emoji 등의 4바이트가 필요한 문자열들이 추가되며 기존의 utf8 자료형을 사용하면 값의 손상이 발생하였고, 이를 해결하기 위해 가변 4바이트 자료형 utf8mb4 Charset을 추가하여 이를 기본값으로 설정한 것이다.
'공부 > DB' 카테고리의 다른 글
[DB] Undo Log & Redo Log (0) | 2025.02.28 |
---|---|
[DB] Checkpoint 아키텍처 (0) | 2025.02.28 |
[DB] VARCHAR와 TEXT (0) | 2023.11.22 |
[DB] Index (2) | 2023.11.14 |
[DB] CHAR과 VARCHAR (0) | 2023.11.07 |