Unicode 9.0 UCA(Unicode Collation Algorithm) 기반으로 언어별 정렬이 정확하다.
ai = accent-insensitive (악센트 무시), ci = case-insensitive.
NO PAD: 문자열 비교 시 후행 공백을 무시하지 않는다.
5.7에서 8.0으로 마이그레이션 시 utf8mb4_general_ci와 정렬 결과가 달라질 수 있다.
utf8mb4_bin
문자의 바이너리(코드포인트) 값으로 직접 비교한다.
대소문자, 악센트를 모두 구분한다.
A ≠ a, é ≠ 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.COLLATIONSWHERE 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_ci만 Yes (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_nameFROM information_schema.SCHEMATAWHERE schema_name = 'your_db';-- 테이블/컬럼 콜레이션SELECT table_name, table_collationFROM information_schema.TABLESWHERE 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 usersWHERE name = '홍길동' COLLATE utf8mb4_bin;