오늘도 어김없이 Mysql에서 작업을 하다가 아래와 같은 오류가 발생했습니다.

해당오류는 아주아주 간단한 오류입니다.
일단은 이 오류를 알아보기위한 테스트 환경을 먼저 설명해드리겠습니다.
테이블 스키마
CREATE TABLE `test` (
`SERIAL` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`TEST1` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`TEST2` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`TEST3` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci'
)
COMMENT='테스트'
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;
위는 테스트를 위한 테이블 스키마 입니다.
실행쿼리
INSERT INTO test(`SERIAL`, `test1`, `test2`,`test3`) VALUES('1','2','3','🎈')
그리고 문제의 실행 쿼리는 위와 같습니다.
이쯤되면 눈치를 채실수도 있겠지만 원인은 저 풍선이모티콘 때문입니다.
해당 오류가 왜 발생하느냐??
원인은 바로 인코딩에 있습니다.
원인설명
테이블의 스키마를 살펴 보시면 인코딩이 utf8mb3_general_ci으로 되어있는것을 확인하실수 있습니다.
이 인코딩의 의미는 utf8mb3_general_ci
즉 "한문자에 3 최대 3바이트를 사용한다" 라는 의미를 가지고 있습니다.
따라서 🎈 같은 이모지는 4바이트를 사용하기에 utf8mb3_general_ci 과 같이 3바이트를 사용하는 인코딩에서 오류를 반환하게 됩니다.
해결
해결법은 아주 간단합니다. 최대 문자바이트를 3이아닌 4로 바꾸면 해결이되는 아주 간단한 오류입니다.
이는 즉 utf8mb3_general_ci 에서 utf8mb4_general_ci 로 변경하면 됩니다.
ALTER TABLE `test`
CHANGE COLUMN `TEST3` `TEST3` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci' AFTER `TEST2`;
인코딩 변경 쿼리는 위와 같습니다.
위처럼 기존 인코딩을 utf8mb4_general_ci 로 변경하고 다시 아까 실패했던 INSERT 문을 실행해보도록 하겠습니다.
INSERT INTO test(`SERIAL`, `test1`, `test2`,`test3`) VALUES('1','2','3','🎈')
위 쿼리를 다시 실행한뒤 조회를 하면 아래와 같이 이모티콘이 해당 컬럼에 정상적으로 삽입되는 것을 확인할수 있습니다.

- 이모지, 특수 심볼, 고대 문자 등 4바이트 문자가 필요하면 무조건 utf8mb4로 설정해야 합니다.
- 기존 utf8/utf8mb3 테이블에서 바로 4바이트 문자를 넣으려 하면 Incorrect string value 오류 발생.
'DB > Mysql' 카테고리의 다른 글
| MySQL 피벗(Pivot) 완벽 가이드: CASE 문 사용하기 (0) | 2025.12.21 |
|---|---|
| MySQL 운영 DB에서 안전하게 트리거 우회하기 (내 세션만 일시정지하는 법) (1) | 2025.12.19 |
| MySQL EXPLAIN TYPE 완벽 정리: ALL, index, range, ref 차이 쉽게 이해하기 (0) | 2025.10.28 |
| MY SQL RECORD LOCK PROCESS KILL 레코드 행락 킬하기 (0) | 2024.07.17 |
| MY SQL 데이터베이스에서 특정 컬럼명 포함된 테이블 찾는 방법 (0) | 2024.04.14 |
