Character Set and Collation
Character Set
DB에서 Character Set이란, 데이터베이스에서 사용하는 문자와 encording 집합입니다. DB를 생성 할때 흔히 지정해주는 문자셋으로 UTF-8, euckr 같은 것들이 있으며, 각 문자가 컴퓨터에 저장될 때 어떠한 코드로 저장될지에 대한 규칙의 집합을 의미합니다.
Character Set에 대한 내용은 Oracle을 기준으로 정리해둔것이 있으니 참고 하시기 바랍니다.(https://rastalion.dev/archives/361)
latin1(2byte), utf8(가변3byte), utf8mb4(가변4byte)는 저장공간의 크기입니다.
MariaDB에서 기본 문자 집합은 latin1이고 기본 데이터 정렬(collation)은 latin1_swedish_ci입니다 (그러나 일부 배포판에서는 다를 수 있습니다). 지원되는 문자 세트 및 데이터 정렬에서 MariaDB가 지원하는 전체 문자 세트 및 데이터 정렬 목록을 보거나 SHOW CHARACTER SET 및 SHOW COLLATION 명령을 사용하여 서버에서 지원되는 문자를 확인할 수 있습니다.
UTF-8은 처음에 가변 4byte로 설계되었습니다. 그러나 전세계 모든 언어문자를 다 카운트 했을때 3byte가 안된다는 사실을 알게 되었고, MySQL, MariaDB 에서는 공간절약+속도향상 을 위해서 UTF-8을 가변3byte로 설계하였습니다. 현재는 Emoji 같은 새로운 문자가 나오면서 UTF-8의 남은 영역을 사용하기 위해 MySQL, MariaDB 에서 가변4byte 자료형인 utf8mb4 를 추가하였습니다(2010년 3월). 기존 utf8 시스템을 utf8mb4 로 바꾸어도 값의 손실은 없습니다. Emoji 문자열의 저장을 지원하지 않으려면 굳이 utf8mb4 를 사용하지 않아도 됩니다. 이 경우 데이터베이스에 텍스트 값 저장 전에 필터링을 하기 바랍니다.
Collation
특정 문자 집합을 비교하고 정렬하는 규칙입니다. character set 안에서 character들을 비교하기 위한 rule 정의이기도 하며, 텍스트 데이터를 정렬(ORDER BY)할 때 사용합니다. 즉 text 계열 자료형에서만 사용할 수 있는 속성입니다.
예를 들어, 문자 집합의 하위 집합은 문자 A, B 및 C로 구성 될 수 있습니다. 기본 데이터 정렬은 A, B, C의 오름차순으로 나타나는 것으로 정의 할 수 있습니다. 다른 문자를 고려하면 더 복잡해집니다. Binary collation은 대문자 A와 소문자 a를 다르게 평가하여 특정 방식으로 정렬합니다. case-insensitive collation은 대소문자를 구분하지 않기 때문에 대문자 A와 소문자 a가 동등하게 평가합니다. 또한, 독일 전화번호부 데이터 정렬은 ue와 ü의 문자를 동등하게 평가합니다.
문자 집합에는 이와 관련된 여러 데이터 정렬이있을 수 있지만 각 데이터 정렬은 하나의 문자 집합에만 연결됩니다. MariaDB에서 문자 집합 이름은 항상 데이터 정렬 이름의 일부입니다.
예를 들어 latin1_german1_ci 데이터 정렬은 latin1 문자 집합에만 적용됩니다.
각 문자 집합에는 하나의 기본 데이터 정렬이 있습니다. latin1 기본 데이터 정렬은 latin1_swedish_ci입니다.
예를 들어, 기본적으로 문자 y는 x와 z 사이에 있으며 리투아니아에서는 i와 k 사이에 정렬되어 있습니다. 마찬가지로 독일어 전화 번호부 순서는 독일어 사전 순서와 다르므로 동일한 문자 집합을 공유하지만 데이터 정렬이 다릅니다.
최신 댓글