728x90
반응형
문제점 및 증상
유튜브 자료를 분석하여 MariaDB에 입력하는 작업을 진행 중에 다음과 같은 오류를 만나게 되었습니다.
File "C:\Dev\Python\Python310\lib\site-packages\mysql\connector\connection_cext.py", line 573, in cmd_query
raise get_mysql_exception(
mysql.connector.errors.DataError: 1366 (22007): Incorrect string value: '\xF0\x9F\x91\xA8\xE2\x80...' for column `YOUTUBE_DL`.`CLIP`.`title` at row 1
왠만한 자료들은 입력이 잘 되는데, 유독 이모지가 있는 자료에서만 위와 같은 오류가 계속 발생하였습니다.
해결 방법
아래 테이블 스키마는 유튜브 자료를 입력하는데 사용한 테이블 입니다.
CREATE TABLE `CLIP`
(
`clip_no` INT NOT NULL AUTO_INCREMENT COMMENT '유튜브 고유번호'
, `member_no` INT NOT NULL COMMENT '작성자 고유번호 (FK: MEMBER.member_no)'
, `clip_id` VARCHAR(50) NOT NULL COMMENT '클립의 ID' COLLATE 'utf8mb3_general_ci'
, `channel_id` VARCHAR(50) NOT NULL COMMENT '채널의 ID' COLLATE 'utf8mb3_general_ci'
, `author` VARCHAR(255) NULL COMMENT '등록자' COLLATE 'utf8mb3_general_ci'
, `title` VARCHAR(1000) NULL COMMENT '클립의 제목' COLLATE 'utf8mb3_general_ci'
, `length` INT NULL COMMENT '시간 (초)'
, `publish_date` DATE NULL COMMENT '클립 등록일'
, `thumbnail_url` VARCHAR(1000) NULL COMMENT '썸네일 이미지 주소 정보' COLLATE 'utf8mb3_general_ci'
, `description` MEDIUMTEXT NULL COMMENT '클립 상세 설명' COLLATE 'utf8mb3_general_ci'
, `reg_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP() COMMENT '클립 정보 등록시각'
, PRIMARY KEY (`clip_no`) USING BTREE
, UNIQUE INDEX `UK_CLIP_ID` (`clip_id`) USING BTREE
)
COMMENT='작품 기본 정보 테이블'
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
;
"MEDIUMTEXT" 자료형을 "MEDIUMBINARY" 형식으로 변경하면, 오류 없이 잘 입력되었습니다.
그래서 이건 "COLLATE" 문제라는 것이 직감되어, 관련 내용을 찾아 보니 유튜브나 SNS 등에서 이모지의 사용 빈도가 늘어나면서 이모지가 사용된 문자열 저장을 위하여 "utf8mb4"로 COLLATE가 확장된 것이었습니다.
기존 "UTF-8"은 "utf8mb3"으로 1문자를 저장하기 위해 1 ~ 3의 가변 바이트를 사용하게 되는데, 이모지 문자를 위해서는 "utf8mb4"로 지정하고 이는 1 ~ 4의 가변 바이트로 문자열을 처리하게 됩니다.
따라서 해결 방법은 아주 간단했습니다.
뒤 테이블에서 "utf8mb3"를 모두 "utf8mb4"로 변경하면, 이모지가 포함된 문자열도 잘 입력됩니다.
오랜만에 MariaDB와 연동하는 작업을 하다 보니, 변경된 내용에 대한 파악이 늦었습니다. 개발자는 새로운 것을 따라 진짜 계속 공부하는 수 밖에 없네요 ^^;
참고자료
- "[MySQL] utf8 vs utf8mb4 차이는?":https://cirius.tistory.com/1769
'DB > MySQL' 카테고리의 다른 글
[mariadb] 특정 계정의 Host를 변경할 때, View 관련 오류 발생 문제 (0) | 2022.11.25 |
---|---|
[MariaDB] 테이블 및 인덱스 용량 확인 (0) | 2022.10.12 |
[MariaDB] "Incorrect definition of table mysql.event" 오류 해결 방법 (1) | 2021.08.22 |
[MariaDB] Database를 백업하는 방법 (0) | 2021.06.27 |
[MariaDB] 시간대 (time-zone) 설정하기 (0) | 2021.04.26 |