🔹 COLLATION() 함수 사용

set @stock_code := '996161';
SELECT COLLATION(@stock_code);

결과 예시:

 

🔹 CHARSET() 함수 사용

set @stock_code := '996161';
SELECT CHARSET(@stock_code);

 결과 예시:

 

 

🔹 변수의 Collaton 과 컬럼의 Collation이 다를 경우의 처리 방법

  • 일반적인 변수 선언
set @stock_code := '1177851';
SELECT COLLATION(@stock_code);

     

  • Collation을 지정하여 선언
set @stock_code := '1177851' collate utf8mb4_0900_ai_ci;
SELECT COLLATION(@stock_code);

 

  • Convert를 사용하여 변환
set @stock_code := convert('1177851' using utf8mb4);
SELECT COLLATION(@stock_code);

 

1️⃣ SHOW VARIABLES 사용

SHOW VARIABLES LIKE 'character\_set\_%';

결과 예시:

 

2️⃣ 특정 데이터베이스의 문자셋 조회

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';

 결과 예시:

 

 

 

3️⃣ 특정 테이블의 문자셋 조회 - 1

show create table tbl_stock_list_us;

 결과 예시:

CREATE TABLE `tbl_stock_list_us` (
  `event_date` date NOT NULL COMMENT '기준일',
  `symbol_code` varchar(10) NOT NULL COMMENT '종목 코드',
  `last_open_raw` double NOT NULL COMMENT '시가 Raw',
  `last_max_raw` double NOT NULL COMMENT '고가 Raw',
  `last_min_raw` double NOT NULL COMMENT '저가 Raw',
  `last_close_raw` double NOT NULL COMMENT '종가 Raw',
  `change_precent_raw` double NOT NULL COMMENT '변동률(퍼센트) Raw',
  `volume_raw` double NOT NULL COMMENT '거래량',
  `upd_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`event_date`,`symbol_code`),
  UNIQUE KEY `idx_01` (`symbol_code`,`event_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

 

3️⃣ 특정 테이블의 문자셋 조회 - 2

SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 결과 예시:

 

4️⃣ 특정 열(Column)의 문자셋 조회

SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 

 결과 예시:

MySQL에서 utf8mb4_0900_ai_ci와 utf8mb4_unicode_ci는 둘 다 utf8mb4 문자셋을 사용하는 대소문자 무시(_ci: case-insensitive) 비교(collation) 방식이지만, 주요한 차이점이 있습니다.

🔹 utf8mb4_unicode_ci

  • MySQL 5.5+ 버전에서 사용되는 표준 유니코드 정렬 방식
  • Unicode 4.0 기준으로 정렬 및 비교 수행
  • 일부 문자(예: 이모지, 특수 문자)에 대한 정렬이 최신 유니코드 표준과 다를 수 있음

특징:

  • MySQL 5.5부터 제공되며 널리 사용됨
  • 성능은 utf8mb4_general_ci보다는 느리지만 정확함
  • 최신 유니코드 규칙을 반영하지 못할 수 있음

🔹 utf8mb4_0900_ai_ci

  • **MySQL 8.0+**에서 제공하는 새로운 유니코드 정렬 방식
  • Unicode 9.0 기준으로 정렬 및 비교 수행
  • AI (Accent-Insensitive): 악센트 무시 (é == e)
  • CI (Case-Insensitive): 대소문자 무시 (A == a)
  • 성능이 개선되었으며 더 정확한 유니코드 정렬을 지원

특징:

  • MySQL 8.0 이상에서 권장됨
  • 최신 유니코드 표준을 반영하여 더 정확한 정렬 방식 제공
  • 성능 최적화됨

 

🔹 정리 (비교)

비교 항목utf8mb4_unicode_ciutf8mb4_0900_ai_ci

MySQL 버전 5.5 이상 8.0 이상
유니코드 버전 4.0 9.0
대소문자 구분 안 함 안 함
악센트 구분 옵션 가능 (utf8mb4_unicode_cs 사용) 안 함 (ai는 Accent-Insensitive)
이모지 지원 일부 제한 있음 더 정확한 비교 가능
정렬 정확도 상대적으로 낮음 최신 표준 적용

📌 MySQL 8.0 이상을 사용한다면 utf8mb4_0900_ai_ci를 권장
📌 MySQL 5.7 이하에서는 utf8mb4_unicode_ci를 사용

 

+ Recent posts