본문 바로가기

프로그래밍

[DB] Character Set, Collate이란 무엇인가?

Mysql에서 DB를 생성할 때 Character Set과 Collation을 지정할 때가 있다.

CREATE DATABASE hardlearner CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

Character Set은 무엇인가?

문자들과 그 문자들을 코드화한 인코딩들의 조합이다.

mysql 공식문서는 character set을 다음과 같이 설명하고 있다.

https://dev.mysql.com/doc/refman/8.0/en/charset-general.html

A character set is a set of symbols and encodings. Suppose that we have an alphabet with four letters: A, B, a, b. We give each letter a number: A = 0, B = 1, a = 2, b = 3. The letter A is a symbol, the number 0 is the encoding for A, and the combination of all four letters and their encodings is a character set.

Character set은 기호들과 인코딩들의 집합이다.

기호라고 한 이유는 우리가 일반적으로 생각하는 문자(A, a, B, b ...)이외에도 악센트를 표기하는 기호, 구두점 등이 포함되기 때문인 것 같다.

가정해보자. 우리는 4개의 문자들을 가지고 있다: A, B, a, b. 각 문자에 숫자를 부여한다: A = 0, B = 1, a = 2, b = 3. 여기서 문자 A는 symbol이며 숫자 0은 문자 A를 위한 인코딩(코드화)이다.

* '코드화'란 주어진 정보를 약호나 기호를 사용하여 일정한 규칙에 따라 표준적인 형태로 변환하는 일이다. (네이버 국어사전)

따라서 위에 주어진 4개의 문자(A, B, a, b) 그리고 그 문자들의 인코딩들(A=0, B=1, a=2, b=3)의 조합이 character set이다.

 

Collation은 무엇인가?

문자열을 비교, 정렬하기 위해 정의된 규칙들의 집합이다.

이 또한 mysql 공식문서를 살펴보자

https://dev.mysql.com/doc/refman/8.0/en/adding-collation.html#:~:text=A%20collation%20is%20a%20set,orders%20characters%20based%20on%20weights.

A collation is a set of rules that defines how to compare and sort character strings. Each collation in MySQL belongs to a single character set. Every character set has at least one collation, and most have two or more collations. A collation orders characters based on weights. Each character in a character set maps to a weight. Characters with equal weights compare as equal, and characters with unequal weights compare according to the relative magnitude of their weights.

collation은 어떻게 문자열을 비교하고 정렬할지 정의한 규칙들의 집합이다.

각 collation은 하나의 character set에 속해있다.

모든 character set은 적어도 1개 이상의 collation을 가지고 있다.

collation은 문자들을 가중치에 기반하여 나열한다.

Character set에 포함된 각 문자는 가중치에 맵핑된다.

동일한 가중치를 가지는 문자들을 비교하면 같다고 판단한다.

그리고 서로 다른 가중치를 가지는 문자들을 비교하면 각 문자가 가지는 가중치의 크고 작음에 따라 동일한 문자인지 아닌지 판단한다.

출처: Mysql 공식문서