본문 바로가기
IT/DBMS 공통

MariaDB / MySQL 한글 깨짐

by 최고영회 2024. 2. 6.
728x90
반응형
SMALL

DB 서버 상태

 - DBMS : mariadb 10.6.13

이 상태에서 yhkim_test 라는 database 를 utf8mb3 로 만든다.

yhkim_test.test_table 을 utf8mb3 으로 만든다.

이 상태에서 java application 에서 mariadb-java-client 3.0.9 driver 를 이용해서 jdbc:mariadb://127.0.0.1:3306/yhkim_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC&useSSL=false 로 연결 하고

select name, age from yhkim_test.test_table 하면 name 한글이 깨진다.

dbms server 의 환경은 변경할 수 없는 상황이니 application 에서 처리 해야 한다.

mysql-connector-java 8.0.29 로 driver 를 변경하고 jdbc:mysql://127.0.0.1:3306/yhkim?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC&useSSL=false 로 연결 후 해 보면 한글 깨짐이 해결된다.

변경된 것은 mariadb -> mysql driver 인데 왜 해결 되었을까?

이 문제는

MariaDB와 MySQL의 JDBC 드라이버간 인코딩 처리 방식의 차이 때문으로 보인다.

MariaDB의 경우 위와 같은 환경에서 기본적으로 latin1 문자셋을 사용하며 이는 한글을 올바르게 처리하지 못하기 때문에 한글 깨짐 현상이 발생하게 된다.

MySQL Connector/J 8.0.29는 utf8mb3를 인식하고 이를 자체 문자셋 매핑에 추가하기 때문에 한글 깨짐이 해결되는 것으로 보인다.

- MySQL :: MySQL Connector/J 8.0 Release Notes :: Changes in MySQL Connector/J 8.0.29 (2022-04-26, General Availability)

 

MySQL :: MySQL Connector/J 8.0 Release Notes :: Changes in MySQL Connector/J 8.0.29 (2022-04-26, General Availability)

Changes in MySQL Connector/J 8.0.29 (2022-04-26, General Availability) Version 8.0.29 is the latest General Availability release of the 8.0 series of MySQL Connector/J. It is suitable for use with MySQL Server versions 8.0 and 5.7. It supports the Java Dat

dev.mysql.com

만약 MariaDB JDBC 드라이버를 그대로 사용해서 한글 깨짐 현상을 해결하려면 MariaDB 서버도 utf8mb4를 지원해야 하며 MariaDB 서버의 문자셋 설정도 utf8mb4 로 변경하고 jdbc:mariadb://127.0.0.1/yhkim_test?useUnicode=true&characterEncoding=utf8mb4&ze..... 로 설정하면 된다.

728x90
반응형
LIST