MySQL

MySQL: CHARACTER SET, COLLATE 설정

dewstream 2025. 8. 25. 08:00
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