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
'DB > MYSQL' 카테고리의 다른 글
[MariaDB] Commands out of sync; you can't run this command now (0) | 2022.12.02 |
---|---|
[MariaDB] commands out of sync. Did you run multiple statements at once? (0) | 2022.12.01 |
SELECT FOR UPDATE (0) | 2022.10.20 |
DB Link (0) | 2022.08.31 |
[작성중]MYSQL Connector 8.0 C++ 빌드하기 (0) | 2022.05.19 |