티스토리 뷰

Database

[MySQL] Character Set & Collation

집사킴 2022. 9. 6. 03:00
728x90

업무 중에 character set utf8mb4 collate utf8mb4_general_ci 로 선언된 컬럼을 발견했다.

utf8mb4를 쓰면 이모지를 지원한다는 것 밖에 몰랐기 때문에 이참에 한번 찾아봤다.


문자 집합 (Character Set)

문자 집합(Character Set)은 문자열에서 사용하는 문자의 집합이다. 예를 들어 a-z까지의 알파벳이 있고 각 알파벳마다 숫자를 a=1, b=2, c=3,…로 연결한다고 가정해보자. 문자 a는 심볼이고 그 a와 연결된 숫자 1은 a의 인코딩(=부호화, 코드화)이다. 이 a부터 z까지의 조합과 코드를 문자 집합(Character Set)이라고 한다.

 

주요 문자 집합

SHOW CHARACTER SET; 명령어로 MySQL에서 지원하는 문자 집합을 조회할 수 있다.

  • 한글 기반 : EUC-KR, utf8mb4, MS949(윈도우), CP949(유닉스 계열. MySQL에선 미지원)
  • 일본어 : cp932, utf8mb4
💡 utf8은 utf8mb4의 부분 집합으로, MySQL 서버에서 utf8mb4가 도입되기 이전에 주로 사용됐다. utf8은 한 글자를 저장하기 위해 1~3바이트까지를 사용하지만 이모지 등 4바이트를 사용하는 글자가 등장함에 따라 이를 저장할 수 있도록 4바이트까지 사용하는 utf8mb4가 생겼다.

 

문자 집합 설정하기

문자 집합은 문자열을 저장하는 CHAR, VARCHAR, TEXT 타입의 컬럼에만 설정할 수 있다.

 

[컬럼에 문자 집합 설정 적용 사례]

CREATE TABLE `comment` (
	`id` bigint not null auto_increment,
	`user_id` bigint not null,
	`context` varchar(255) null character set utf8mb4 # 특정 컬럼에 문자집합 적용
);

 

 

MySQL에서 최종적으로는 컬럼 단위로 문자 집합을 관리하지만 편의를 위해 MySQL 서버와 DB, 그리고 테이블 단위로 기본 문자 집합을 설정할 수 있는 기능을 제공한다. 즉 테이블의 문자 집합을 UTF-8로 설정하면 칼럼의 문자 집합 집합을 별도로 지정하지 않아도 해당 테이블에 속한 컬럼은 UTF-8 문자 집합을 사용한다. 물론 테이블의 기본 문자 집합이 UTF-8이라고 하더라도 각 컬럼에 대해 문자 집합을 EUC-KR이나 ASCII 등으로 별도 지정할 수도 있다.

 

[테이블에 문자 집합 적용 사례]

CREATE TABLE `comment` (
	`id` bigint not null auto_increment,
	`user_id` bigint not null,
	`context` varchar(255) null
)ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4 # 테이블에 문자 집합 적용

콜레이션(Collation)

콜레이션은 문자열 컬럼의 값에 대한 비교나 정렬 순서를 위한 규칙을 의미한다. 즉, 비교나 정렬 작업에서 영문 대소문자를 같은 것으로 처리할지, 아니면 더 크거나 작은 것을 판단할지에 대한 규칙을 정의하는 것이다. 각 문자열 컬럼의 값을 비교하거나 정렬할 때는 항상 문자 집합뿐 아니라 콜레이션의 일치 여부에 따라 결과가 달라지며, 쿼리의 성능 또한 상당한 영향을 받는다.

🔠 Collate : 1.대조하다 2.맞추어 보다 3.비교하다

 

MySQL의 모든 문자열 타입의 컬럼은 독자적인 문자 집합과 콜레이션을 가진다. 각 컬럼에 대해 독립적으로 문자 집합과 콜레이션을 지정하지 않으면 MySQL 서버나 DB의 기본 문자 집합과 콜레이션이 자동으로 설정된다.

 

[Database에 기본 설정된 문자 집합과 콜레이션 확인하는 법]

select @@character_set_database, @@collation_database;

 

SHOW COLLATION; 명령어로 MySQL에서 지원하는 콜레이션을 확인할 수 있다.

 

문자 집합과 콜레이션과의 관계

문자 집합은 2개 이상의 콜레이션을 가지고 있으며, 하나의 문자 집합에 속한 콜레이션은 다른 문자 집합과 공유해서 사용할 수 없다. 문자 집합만 지정 시 해당 문자 집합의 디폴트 콜레이션이 적용되고, 반대로 콜레이션만 지정한 경우 묵시적으로 해당 콜레이션이 속한 문자 집합으로 사용된다.

앞서 본 문자집합 목록에서 문자집합에 해당하는 기본 콜레이션도 같이 확인할 수 있다

 

콜레이션 이름의 의미

3개 파트로 구성된 이름

  1. 문자 집합의 이름
  2. 해당 문자 집합의 하위분류
  3. 대소문자 구분 여부
    1. ci (Case Insensitive) : 대소문자 구분 X
    2. cs (Case Sensitive) : 대소문자 구분

 

2개 파트로 구성된 이름

  1. 문자 집합 이름
  2. 항상 bin(=binary, 이진 데이터) 키워드 사용.
    • 이진 데이터로 관리되는 문자열 컬럼은 별도의 콜레이션을 가지지 않는다.
    • 비교 및 정렬은 실제 문자 데이터의 바이트 값을 기준으로 수행된다.

 

 


참고자료

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791158392727&orderClick=LAG&Kc= 

 

Real MySQL 8.0 (2권) - 교보문고

개발자와 DBA를 위한 MySQL 실전 가이드 | MySQL 서버를 활용하는 프로젝트에 꼭 필요한 경험과 지식을 담았습니다! 《Real MySQL 8.0》은 《Real MySQL》을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0

www.kyobobook.co.kr

https://www.mysqltutorial.org/mysql-character-set/

 

MySQL Character Set - An Introduction to Character Sets in MySQL

This tutorial discusses about MySQL character set and shows you step by step how to perform various operations on character sets.

www.mysqltutorial.org

 

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함