개요
- MariaDB sonar 데이터베이스의 주요 텍스트 컬럼이 utf8mb3(3바이트) 문자셋으로 구성되어 있어, 4바이트 이상 UTF-8 문자(이모지, CJK 확장 한자, 수학 특수기호 등)를 포함한 값을 저장하려 할 경우
Incorrect string value에러가 발생합니다. 직접 SQL INSERT/UPDATE뿐 아니라 플레이북·배치 룰·티켓 자동 생성처럼 prepared statement의?바인딩으로 DB에 값이 전달되는 모든 경로에서 동일하게 실패합니다.
적용 대상
-
제품: SNR (Sonar)
-
버전: 전체 ( sonar 데이터 베이스 utf8mb3 스키마로 초기 설치된 환경 전반)
배경 / 문제 설명
-
증상:
INSERT INTO sonar_tickets ...또는UPDATE sonar_tickets SET content = ...형태의 쿼리 실행 시java.sql.SQLDataException: Incorrect string value예외로 실패(배치 탐지에서 티켓 생성 시 4바이트 이상의 문자가 있을 경우) -
영향도:
-
배치 룰의 티켓 자동 생성 경로(
TicketServiceImpl.createTicket→SqlConnectorImpl.execute)에서도 동일 예외가 발생하여 해당 알림 건의 티켓 발행이 누락됨 -
플레이북·핸들러 등에서 사용자 입력 또는 외부 페이로드를 그대로 content/title 컬럼에 저장할 때 간헐적으로 재현
-
-
원인(추정 포함):
-
MariaDB의
utf8(별칭utf8mb3) 문자셋은 UTF-8을 최대 3바이트까지만 허용합니다. 코드포인트 기준 U+0000 ~ U+FFFF(BMP) 영역만 수용 가능합니다. -
이모지(U+1F300 이상), CJK 확장 한자 Extension B~G(U+20000 이상), 수학 기호(U+1D400 이상) 등은 UTF-8 인코딩 시 4바이트를 차지하므로 utf8mb3 컬럼이 거부합니다.
-
에러 메시지의 바이트 시퀀스(예:
\\xF0\\x9F\\x98\\x8A는
, \\xF1\\xB1\\xB3\\xB0은 CJK 확장 한자 영역) -
sonar_tickets.content,title을 포함한 다수의 텍스트 컬럼이 초기 스키마 생성 시 utf8mb3으로 선언되어 있습니다.
-
재현 방법 (선택)
- 대응 > 수동 티켓 추가 에서
(이모지) 를 내용에 넣고 저장 시 동일한 에러 발생
결론
-
MariaDB sonar DB는 현재 utf8mb3 문자셋 기반으로 구성되어 있어, 4바이트 이상 UTF-8 문자(이모지, CJK 확장 한자, 수학 기호)는 저장할 수 없습니다.
-
INSERT/UPDATE 형태의 직접 SQL 실행뿐 아니라, 플레이북·배치 룰 등 내부 경로에서
?바인딩으로 전달되는 값도 동일 제약을 받습니다. -
운영 중 유사 에러 확인 시 araqne.log의
Incorrect string value바이트 시퀀스를 근거로 원본 문자를 식별할 수 있습니다.