728x90
※ MySQL: CHARACTER SET, COLLATE Configuration.
안녕하세요. 듀스트림입니다.
오늘 포스팅은 MySQL의 캐릭터 셋과 컬레이션 설정에 대한 내용입니다.
PostgreSQL은 인코딩을 데이터베이스 단위로만 지정 가능하지만, MySQL은 컬럼 레벨에서도 설정 가능합니다.
로케일(Locale)
- MySQL에서는 시스템 로케일을 직접 테이블별로 지정하는 것은 불가능합니다.
- 하지만, 정렬 순서(COLLATE)를 통해 로케일에 따른 문자열 비교 방식을 조정할 수 있습니다.
- 예를 들어 utf8mb4_general_ci vs utf8mb4_unicode_ci는 정렬 규칙이 달라서 사실상 로케일처럼 작동합니다.
일반적으로 캐릭터셋은 utf8mb4, 컬레이트는 utf8mb4_general_ci를 많이 사용합니다.
조회 쿼리
▸ 데이터베이스(Character Set & Collation) 확인
-- 특정 데이터베이스 정보 확인
SELECT
SCHEMA_NAME AS database_name,
DEFAULT_CHARACTER_SET_NAME AS character_set,
DEFAULT_COLLATION_NAME AS collation
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = <'스키마명'>;
▸ 테이블(Character Set & Collation) 확인
-- 특정 데이터베이스 내 모든 테이블 문자셋 및 정렬
SELECT
TABLE_NAME,
TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = <'스키마명'>;
▸ 컬럼(Character Set & Collation) 확인
-- 특정 테이블 컬럼 문자셋과 정렬
SELECT
COLUMN_NAME,
CHARACTER_SET_NAME,
COLLATION_NAME,
DATA_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = <'스키마명'>
AND TABLE_NAME = <'테이블명'>;
테스트
▸ 데이터베이스 수준
CREATE DATABASE testdb CHARACTER SET utf8mb4_general_ci COLLATE utf8mb4_bin;

▸ 테이블 수준
CREATE TABLE test_1 (name VARCHAR(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

▸ 컬럼 수준
CREATE TABLE test_2 (name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);

오늘은 여기까지~
728x90
'MySQL' 카테고리의 다른 글
| MySQL: 프리픽스 인덱스 (0) | 2025.09.08 |
|---|---|
| MySQL: 메모리 파라미터 (3) | 2025.08.26 |
| MySQL: Lock (3) | 2025.07.29 |
| MySQL: InnoDB Cluster 고가용성 구성 (3) | 2025.07.25 |
| MySQL: RHEL 기반 Linux에 MySQL 설치 방법 (0) | 2025.06.20 |