utf8mb4 콜레이션 비교

개요

MySQL에서 utf8mb4 문자셋과 함께 자주 사용되는 세 콜레이션의 차이를 정리한다.

항목utf8mb4_general_ciutf8mb4_0900_ai_ciutf8mb4_bin
MySQL 기본값5.7 이하8.0 이상-
대소문자 구분없음 (ci)없음 (ci)있음
악센트 구분없음없음 (ai)있음
유니코드 표준Unicode 3.0 기반Unicode 9.0 (UCA)바이트 비교
한글 정렬가나다 순가나다 순코드포인트 순
PAD 속성PAD SPACENO PADPAD SPACE
성능빠름약간 느림빠름

상세 설명

utf8mb4_general_ci

  • MySQL 5.7 이하의 기본 콜레이션.
  • Unicode 3.0 기반의 단순화된 정렬 규칙을 사용해 속도가 빠르다.
  • 일부 언어에서 정확하지 않은 정렬이 발생할 수 있다 (예: 독일어 ß).
  • ci = case-insensitive (대소문자 무시), 악센트도 무시.

utf8mb4_0900_ai_ci

  • MySQL 8.0 이상의 기본 콜레이션.
  • Unicode 9.0 UCA(Unicode Collation Algorithm) 기반으로 언어별 정렬이 정확하다.
  • ai = accent-insensitive (악센트 무시), ci = case-insensitive.
  • NO PAD: 문자열 비교 시 후행 공백을 무시하지 않는다.
  • 5.7에서 8.0으로 마이그레이션 시 utf8mb4_general_ci와 정렬 결과가 달라질 수 있다.

utf8mb4_bin

  • 문자의 바이너리(코드포인트) 값으로 직접 비교한다.
  • 대소문자, 악센트를 모두 구분한다.
  • Aa, ée.
  • 정렬 순서가 코드포인트 기준이라 한글은 자모 순서와 다를 수 있다.
  • 비밀번호 해시나 토큰처럼 정확한 바이트 일치가 필요한 컬럼에 적합하다.

PAD SPACE vs NO PAD 차이

-- PAD SPACE 콜레이션: 후행 공백 무시 → 같다고 판단
SELECT 'abc' = 'abc   ' COLLATE utf8mb4_general_ci;  -- 1
 
-- NO PAD 콜레이션: 후행 공백 포함 비교 → 다르다고 판단
SELECT 'abc' = 'abc   ' COLLATE utf8mb4_0900_ai_ci;  -- 0

현재 DB/테이블 콜레이션 확인

-- 사용 가능한 콜레이션 목록
SELECT * FROM information_schema.COLLATIONS
WHERE COLLATION_NAME IN ('utf8mb4_general_ci', 'utf8mb4_0900_ai_ci', 'utf8mb4_bin');
+--------------------+--------------------+-----+------------+-------------+---------+---------------+
| COLLATION_NAME     | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN | PAD_ATTRIBUTE |
+--------------------+--------------------+-----+------------+-------------+---------+---------------+
| utf8mb4_0900_ai_ci | utf8mb4            | 255 | Yes        | Yes         |       0 | NO PAD        |
| utf8mb4_bin        | utf8mb4            |  46 |            | Yes         |       1 | PAD SPACE     |
| utf8mb4_general_ci | utf8mb4            |  45 |            | Yes         |       1 | PAD SPACE     |
+--------------------+--------------------+-----+------------+-------------+---------+---------------+

컬럼 설명

컬럼명설명
IS_DEFAULT해당 문자셋의 기본 콜레이션 여부. utf8mb4_0900_ai_ciYes (MySQL 8.0 기준)
IS_COMPILED서버 바이너리에 컴파일된 콜레이션 여부. 모두 Yes이면 별도 로드 없이 바로 사용 가능
SORTLEN정렬 키 생성에 필요한 메모리 가중치. 0900_ai_ci는 0 (UCA 최적화), 나머지는 1
PAD_ATTRIBUTE문자열 비교 시 후행 공백(trailing space) 처리 방식 → PAD SPACE vs NO PAD 섹션 참고
-- DB 기본 콜레이션
SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA
WHERE schema_name = 'your_db';
 
-- 테이블/컬럼 콜레이션
SELECT table_name, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'your_db';

콜레이션 지정 예제

-- DB 생성 시
CREATE DATABASE mydb
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;
 
-- 테이블 생성 시
CREATE TABLE users (
  id   INT PRIMARY KEY,
  name VARCHAR(100) COLLATE utf8mb4_0900_ai_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-- 쿼리 시 명시적 지정
SELECT * FROM users
WHERE name = '홍길동' COLLATE utf8mb4_bin;

선택 가이드

상황권장 콜레이션
MySQL 8.0 이상 일반 용도utf8mb4_0900_ai_ci
MySQL 5.7 이하 또는 하위 호환 필요utf8mb4_general_ci
대소문자/악센트 구분 필요utf8mb4_bin
비밀번호, 토큰 등 정확한 일치 필요utf8mb4_bin

참고