MariaDB sonar DB에 4바이트 이상 문자(이모지 등) 저장 시 오류 발생

개요

  • 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.createTicketSqlConnectorImpl.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:blush:, \\xF1\\xB1\\xB3\\xB0은 CJK 확장 한자 영역)

    • sonar_tickets.content, title을 포함한 다수의 텍스트 컬럼이 초기 스키마 생성 시 utf8mb3으로 선언되어 있습니다.

재현 방법 (선택)

  1. 대응 > 수동 티켓 추가 에서 :joy: (이모지) 를 내용에 넣고 저장 시 동일한 에러 발생

결론

  • MariaDB sonar DB는 현재 utf8mb3 문자셋 기반으로 구성되어 있어, 4바이트 이상 UTF-8 문자(이모지, CJK 확장 한자, 수학 기호)는 저장할 수 없습니다.

  • INSERT/UPDATE 형태의 직접 SQL 실행뿐 아니라, 플레이북·배치 룰 등 내부 경로에서 ? 바인딩으로 전달되는 값도 동일 제약을 받습니다.

  • 운영 중 유사 에러 확인 시 araqne.log의 Incorrect string value 바이트 시퀀스를 근거로 원본 문자를 식별할 수 있습니다.