DB/MYSQL
서버에서 DB로 UTF-8 데이터 삽입시 데이터가 깨지는 문제
MAKGA
2022. 11. 8. 20:53
320x100
C++ 서버에서 "인벤토리 부족"이라는 텍스트를 DB에 삽입하려고 할 때 다음과 같이 저장되는 문제가 있었다.
const char* text = u8"인벤토리 부족";
DB Tool로 직접 붙어 수정한 경우에는 정상적인 한글로 표기가 되었다.
단순히 표시만 깨진 데이터인가 했는데 HEX값으로 봤을 때도 다른 데이터였다.
좌> C3ACC29DC2B8C3ABC2B2C2A4C3ADE280A0C2A0C3ABC2A6C2AC20C3ABC2B6E282ACC3ACC2A1C2B1
우> EC9DB8EBB2A4ED86A0EBA6AC20EBB680ECA1B1
해결하려고 시도한 방법들
1. C:\Program Files\MariaDB 10.5\data\my.ini 파일 내용 추가
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
character-set-client-handshake=FALSE
[mysql]
default-character-set=utf8
2. 현재 charset과 collation 확인 확인
show variables like 'c%';
DB charset 변경
ALTER DATABASE 'dbname' DEFAULT CHARACTER SET UTF8;
DB charset 확인
SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA
WHERE schema_name = "dbname";
Table charset 변경
ALTER TABLE 'tablename' CONVERT TO CHARACTER SET UTF8;
Table charset 확인
SHOW FULL COLUMNS FROM tablename;
c++에서 사용중인 mariadb connector을 이용해 db에 connect시 host 주소에 사용할 캐릭터 셋을 추가
const char* host = "tcp://127.0.0.1:3306/dbname?charset=utf8";
320x100