결론: 윈도우에서 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로 데이터를 보낼 때 문제가 생긴다고 보는 것이 맞을 것이다.
'IT issue' 카테고리의 다른 글
Visual Studio Code에서 LaTeX 쓰기 (1) | 2017.07.23 |
---|---|
Error Code: 1305. FUNCTION JSON_EXTRACT does not exist (0) | 2017.05.15 |
한성 slx150 서비스센터 수리비용 (0) | 2017.04.11 |
용산의 메인보드 수리점 '더 컴' (3) | 2017.03.28 |
오버워치 스크린샷 찍을 때 먹통 해결하기 (0) | 2017.03.22 |