MySQL 캐릭터셋 설정하기
created Sep 18, 2022 | updated Oct 15, 2022
MySQL의 Character Set과 Collation을 설정하는 방법, 주로 사용하는 값에 대해서도 알아보자.
개념
- 캐릭터셋 (Character Set; 문자 집합)
- 기호(symbol)와 인코딩의 집합이다.
- 그래픽 문자(휴먼 언어와 같은)에 숫자를 할당하는 것을 캐릭터 인코딩(Character Encoding)이라고 한다.
- 한 개의 캐릭터는 한 개의 숫자 값에 매핑되고, 맵핑된 다수의 값들은 집합이 되어 캐릭터셋(Character Set)이 된다.
- 정렬 (Collation; 비교 및 대조)
- 캐릭터셋의 캐릭터를 비교하기 위한 규칙의 집합이다.
Character Set과 Collation 설정하기
Character Set
- 주로
utf8mb4
사용한다. - utf8mb3의 경우 이모지(emoji)는 깨질 수 있다.
Collation
- 주로
utf8mb4_general_ci
사용한다. - utf8mb4_general_ci는 대소문자 구별없이 정렬하고 정렬 속도가 빠르다.
- ci는 case-insensitive의 약자이고, 대소문자를 구분을 하지 않는 다는 것을 알 수 있다.
- 만일 대소문자 구별이 필요하다면
utf8mb4_bin
를 사용한다. 하지만 bin() 함수를 대신 사용할 수도 있다. - 다국어 처리가 필요한 경우
utf8mb4_unicode_ci
를 사용한다.
데이터베이스의 character set과 collation 확인하기
SHOW CHARACTER SET;
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
...
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
...
(예제) 데이터베이스와 테이블 생성하기
character set과 collation은 데이터베이스, 테이블, 컬럼 정의할 때 설정할 수 있다.
CREATE DATABASE IF NOT EXISTS d_foo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS t_bar (
id bigint(20) NOT NULL AUTO_INCREMENT,
type char(10) NOT NULL,
description varchar(256) NULL CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;