ebson

[MariaDB] innoDB CHARSET 과 COLLATE 의 개념과 종류별 특징 본문

DATABASE STUDY

[MariaDB] innoDB CHARSET 과 COLLATE 의 개념과 종류별 특징

ebson 2024. 1. 23. 23:08

CHARSET 과 COLLATE 의 개념

CHARSET 은 문자의 집합이라면 COLLATE 는 이들 문자 집합을 비교하고 정렬하는 규칙에 관한 것이다. 어떤 규칙에서는 영어 대소문자를 구분하는 반면 다른 규칙에서는 구분하지 않을 수 있다. 어떤 규칙에서는 악센트를 구분할 수도 있고 다른 규칙에서는 구분하지 않을 수 있다. 그리고 어떤 규칙에서는 이모지 문자를 지원하는 반면 어떤 규칙에서는 이모지 문자를 지원하지 않을 수 있다.

 

한편, MariaDB 에서는 CHARSET은 언제나 COLLATE 이름의 일부이다. 예를 들어, COLLATE 의 일종인 utf8mb4_bin 에서 utf8mb4 는 CHARSET 에 해당한다.

 

utf8mb4 CHARSET

utf8mb4 는  utf-8 CHARSET 을 확장하고 보완한 CHARSET이다. uft-8 CHARSET 이 3바이트로 모든 문자를 표현해왔으나 이모지 문자 등을 표현하지 못함에 따라, 4바이트로 이들 문자들까지도 표현할 수 있도록 한 것이 utf8mb4 CHARSET 이다.

 

MariaDB 에서 CHARSET 과 COLLATE 목록 확인하기

MariaDB 에서는 SHOW CHARACTER SET 명령어로 지원하는 CHARSET 을 확인할 수 있고 SHOW COLLATION 명령어로 지원하는 COLLATE 목록을 확인할 수 있다.

SHOW CHARACTER SET -- 지원 CHARSET 목록 조회
SHOW COLLATION -- 지원 COLLATE 목록 조회

 

COLLATE 이름을 이해하기

COLLATE 이름에 '_ci' 가 포함되면 영어 대소문자를 구분하지 않는다는 의미이다. 반면, '_cs'가 포함되면 영어 대소문자를 구분한다는 의미이다. 그리고 COLLATE 이름에 '_ai' 또는 '_as' 가 포함되면 악센트를 구분하지 않는다는 의미이다.

 

한편, COLLATE 이름에 nopad 가 포함되면 후행 공백들을 일반 문자와 같이 여기겠다는 의미이다.

또한, COLLATE 이름에 _bin 이 포함되면 binary로 값을 저장하겠다는 것이고 _general 이 포함되면 binary 값보다 더 사람 친화적으로 값을 저장한다는 것이다. 그리고 _unicode 가 포함되면 이를 반번 더 사람 친화적으로 처리한다는 것을 의미한다.

 

참고로, MySQL 8.0 을 기준으로 COLLATE 들의 조회 성능을 비교한 결과 utf8mb4_bin, utf8mb4_general_ci, utf8mb4_unicode_ci 순서로 성능이 좋았다. 

 

프로젝트의 특성에 맞는 CHARSET 과 COLLATE 을 사용하기

이상의 내용을 숙지한 후에 프로젝트의 특성에 맞게 CHARSET 과 COLLATE 를 설정하는 것이 좋다. 대소문자 구분이 필요한지, 악센트 구분이 필요한지, 이모지 문자열을 사용할 필요가 있는지를 고려할 수 있을 것이다. 또는 이들과 함께 읽기 성능을 고려할 수 있다.

 

참고로, 테이블 생성시 컬럼과 테이블 수준에서 CHARSET 과 COLLATE 를 설정하는 문법은 아래와 같다.

CREATE TABLE `COLLATE_TEST` (
	`COL1` VARCHAR(45)	CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
	, `COL2` VARCHAR(45)	CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
	, `COL3` VARCHAR(45)	CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
	, `COL4` VARCHAR(45)	CHARACTER SET utf8mb4 COLLATE utf8mb4_nopad_bin
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
;

 

 

 

참고출처

"Character Set and Collation Overview" , MariaDB 공식문서 , https://mariadb.com/kb/en/character-set-and-collation-overview/.

"Supported Character Sets and Collations" , MariaDB 공식문서 , https://mariadb.com/kb/en/supported-character-sets-and-collations/.

"Setting Character Sets and Collations" , MariaDB 공식문서 , https://mariadb.com/kb/en/setting-character-sets-and-collations/.

"Charset 와 Collation 설정이 MySQL 성능에 미치는 영향" , 또리장군 블로그 , 2021년 3월 1일 수정, 2024년 1월 23일 접속, https://blog.naver.com/parkjy76/222260753535.

 

 

Comments