반응형

결론: 윈도우에서 MySQL을 쓰든 MariaDB를 쓰든 utf8로 작업하고 싶다면 MySQL Workbench 설치해서 작업하자.


DB에 한국어, 일본어, 영어 등 외국어를 모두 담아야 하는 상황이 생겼다. euckr은 절대악이기 때문에 db 만들 때 utf8로 해놨다. 근데 문제가 생겼다.


* 아래의 모든 상황은 MySQL이 아닌 MariaDB 사용 시의 스크린샷입니다. 물론 MySQL을 쓰더라도 동일한 상황일 것이다.


문제1. 설치할 때 utf8로 해놔도 추가로 작업을 해야 한다.

서버에는 utf8로 저장한다. 하지만 클라이언트와 통신할 때 쓰는 문자셋은 또 따로 설정해야 한다.

문자셋과 collation 설정은 show variables like 'c%'; 를 입력해서 편하게 알아볼 수 있다.

character_set_database, character_set_server, character_set_system 등은 utf8로 되어있지만 character_set_client, character_set_connection 등은 euckr로 되어있음을 알 수 있다.

이는 MariaDB 10.1 버전 64비트 기본 설치 경로 기준 C:\Program Files\MariaDB 10.1\data\my.ini 파일을 수정하여 바꿀 수 있다.

[client]단 밑에 default-character-set=utf8 한 줄 추가한다.

이렇게 해서 모든 게 잘 된다면 좋겠지만 여기서 문제2 발생.

문제2. utf8로 모두 변경하면 커맨드 프롬프트 상에서 한글 등의 입력 시 에러가 발생한다.

ERROR 1366 (22007): Incorrect string value: '\x??\x??\x??\x??...' for column '???' at row 1

(에러메시지의 일부 내용은 임의로 물음표 처리하였습니다.)

영어로 된 데이터는 정상적으로 입력되지만 한글이나 한자 등이 포함된 데이터는 입력이 되질 않는다. 검색해보면 euckr로 바꾸는 경우가 많은 것 같다. 근데 난 euckr이라는 단어를 쳐다보기도 싫어서 더 알아봤다.

이를 해결해보기 위해 이런저런 시도를 해봤는데 결론만 얘기하면 커맨드 프롬프트에서 작업하기 위해서는 한국어 윈도우 시스템 Locale인 CP949(euckr)을 써야 한다.

한글 윈도우 사용 시 커맨드 프롬프트는 기본적으로 코드페이지를 CP949로 잡는데, 일단 chcp 65001 명령어를 사용해 일시적으로 UTF-8로 바꿀 수 있다. 레지스트리를 수정해서 영구적으로 바꿀 수도 있긴 하다. 근데 문제는 UTF-8로 바꿔도 정상적으로 동작을 안 한다. 좀 찾아보니 한국의 모 자동차회사처럼 '윈도우는 원래 그렇게 쓰는거에요~ 고객님' 같은 상황인 것 같다. stackoverflow의 모 사용자의 표현을 빌리자면, '윈도우에서 UTF-8은 2등시민이다'.

동일한 쿼리를 MySQL WorkBench를 이용해서 실행해보았다.

정상적으로 실행되었음을 알 수 있다. 좀 알아보니 WorkBench 쓰면 위에서 my.ini 파일을 수정할 필요도 없는 것 같다. 다 알아서 해준다.


쿼리 실행 후 select로 데이터가 잘 들어갔는지 확인해봤다. 한글이 정상적으로 표시됨을 알 수 있다.


chcp 65001 명령어를 실행하여 UTF-8로 변경 후 mysql에 접속하여 데이터를 확인해봤다.

조회할 때는 정상적으로 표시된다. 그래서 insert 명령으로 데이터를 커맨드 프롬프트에서 입력한 후 다시 조회해보았다. 그랬더니 글자가 깨진다. 입력이 애초에 이상하게 들어가서 WorkBench에서도 표시가 제대로 되지 않았다. 즉 커맨드 프롬프트 상에서 UTF-8로 데이터를 보낼 때 문제가 생긴다고 보는 것이 맞을 것이다.

반응형

+ Recent posts