MySQL 윈도우 커맨드 라인에서 문제없이 한글 입력하기

 생활코딩이라는 멋진 프로젝트가 있습니다. @egoing 님이 진행하시는 프로젝트인데, 개발자든 비개발자든 프로그래밍(정확히 말해 웹)을 배울 수 있게 동영상 튜토리얼을 만드시는 프로젝트 입니다. 

http://opentutorials.org/

 대부분 혼자 작업하시는 것으로 봐서 엄청난 실행력을 지니신 분입니다. 진행하시는 내용중 흥미로운 것중 하나가 ‘공동공부’라는 것입니다. 한 항목에 대해 사람들을 모으고 정해진 날짜에 진도를 나가면서 구글닥스에 자신의 진도를 기록하는 것인데요, 하루 분량이 많지 않아 부담도 적고 사람들이 같이 진행해서 힘도 얻고 꾸준히 진행할 수 있는 장점이 있습니다. 돈이 되는 것도 아닌데, 자진해서 이런 것들을 진행한다는 사실과 고민의 흔적이 보이는 내용들이 멋져보일 뿐이죠. 

 서론이 길었는데, 현재 MySQL 기초과정이 공동공부로 진행중입니다. 물론 저도 참여중이구요. MySQL을 배우기 위해 제 넷북에 APMSetup7으로 MySQL을 설치하고 따라가던 도중 문제하나에 봉착했습니다. 강의는 리눅스 환경에서 진행되고 저는 윈도우즈 커맨드 라인에서 따라가는데 한글 인코딩이 문제가 되더군요. 윈도우즈 커맨드라인이 utf-8 입력을 받지 못하고 euckr로 입력을 받다보니, DB 생성시 utf-8으로 설정하게 되면 콘솔에서 한글 입력시 문제가 발생하는 것이었습니다. 아래와같이 에러가 발생합니다.

 ….. 테이블 생성은 되고 이름이 두글자로 잘리는 현상이었는데… 재현하려고 하다보니 뭘 다르게 한건지 생성 자체를 못하네요. 흠;; -_-;;

 실제 상황에선 보통 호스팅하는 리눅스 서버에 ssh로 접속하기 때문에 문제될 일이 없겠습니다만, 실습환경이 이래서는 어렵다 생각되서 egoing님에게 물어봤습니다. 알려주신 내용은 리눅스나 유닉스에서 my.conf 파일을 수정하여 문자셋을 utf8으로 맞춰주는 내용이었습니다.

http://opentutorials.org/course/195/1361

 저는 윈도우즈에서 APMSetup으로 설치했기 때문에 my.conf같은 파일 위치도 모르겠고, 윈도우즈 커맨드라인이 utf8입력이 안되는 상황이 문제인데, MySQL쪽 설정을 utf8으로 바꾼다고 해결책이 안될거 같더군요. 자꾸 물어보기엔 죄송스러워서, 직접 좀 찾아보게 되었습니다. 그제서야, MySQL 설정변경도 이해가 되고 커맨드 라인에서도 문제없이 쉽게 사용할 수 있는걸 알게 되었죠. 다음 두가지를 해주면 됩니다.

1. MySQL 기본 인코딩 변경

 MySQL 은 설정파일을 가지고 있습니다. 리눅스나 유닉스라면 egoing님 설명대로 /etc/mysql/my.conf 파일이겠지만, 윈도우즈에서 APMSetup을 이용해 설치한 경우 경로가 당연히 다르겠죠. 저같은 경우, APMSetup7을 이용해 설치했는데, 기본 디렉토리로 다음에 설치되어 있었습니다.

C:\APM_Setup\Server\MySQL5

 윈도우즈용 MySQL은 설정파일이름이 ‘my.ini’라고 알게 되었는데, 없습니다. ㅡ.ㅡ;;; 다시 검색을 해보니, APMSetup7 패키징 하신분이 실수(버그라고 하기엔 좀..)가 있었더군요. 한단계 더 내려가서 data폴더에 넣어 놨습니다. 해당 파일을 복사해서 제위치에 붙여넣기 해줍니다.

C:\APM_Setup\Server\MySQL5\data\my.ini -> C:\APM_Setup\Server\MySQL5\my.ini

 APMSetup7의 설정파일은 친절히도 egoing님의 설명대로 [client] 도 utf8으로 되어있고, [mysqld]도 utf8으로 되어 있습니다. 이제, MySQL을 재실행 해줍니다. 이는 APMSetup을 실행해서 STOP-START로 쉽게 해줄 수 있습니다.

 이제 윈도우즈 커맨드 창에서 MySQL에 접속하여 설정을 확인해보면 다음과 같이 변해 있음을 알 수 있습니다. 설정을 확인하는 방법은 다음과 같습니다.

mysql> show variables like ‘c%’;

 기본 설정들이 utf8으로 변경된 것을 볼 수 있습니다. 웹에서 사용하는 mysqladmin의 경우, utf8으로 전달이 될 것이기 때문에 기존에도 문제가 없지만, 여기서도 문제는 없습니다. 이제 남은 문제는 윈도우즈 커맨드 라인에서 utf8이 입력 불가능한 것만 남았죠.

2. 윈도우즈 커맨드 라인 사용시, 클라이언트 인코딩을 ‘euckr’로 변경.

  눈치 채셨나요? MySQL은 그리 허술하게 만들어지지 않았습니다. ㅋㅋㅋ 기본 클라이언트 문자셋은 utf8입니다만, 클라이언트에서 자신의 문자셋을 변경할 수 있습니다. 윈도우즈 커맨드라인에서 입력하는 한글은 euckr이니 euckr로 변경하면 되는 것입니다. 이는 다음과 같이 입력하면 됩니다.

mysql> set character set euckr;

앞에서 사용한 환경변수보기를 하면, character_set_client 만 euckr로 변경된 것을 확인할 수 있습니다.

 

 환경변수를 변경하면 전체 적용되는 것 아닌가?라고 생각할 수 있지만, 웹에서 확인해보니 클라이언트 문자셋은 자신에게만 해당되는 내용으로 보입니다. 기존 값 그대로 utf8임을 확인할 수 있습니다.

 기존에는 커맨드 라인으로 입력한 한글은 웹에서 mysqladmin으로 보면 깨져보이고 그 반대역시 깨져보였었습니다. 작업을 완료한 후에는 다음과 같이 양쪽에서 모두 잘 표시되는 것을 볼 수 있습니다.

 새롭게 알아낸 내용 정리 

 MySQL은 클라이언트마다 문자셋을 다르게 설정할 수 있습니다. 간단하게 다음과 같은 명령어로 말이죠. 

mysql> set character set euckr;

euckr을 현재 입력 가능한 문자셋으로 설정하면 오동작 없이 입출력 문자셋과 저장용 문자셋이 자동 변경된다는 사실입니다. 우왕ㅋ굳ㅋ~ 좀만 아는 사람들은 바보취급할지도 모르지만, 자력으로 하나 배웠네요. 🙂

  

“MySQL 윈도우 커맨드 라인에서 문제없이 한글 입력하기”에 대한 4개의 댓글

  1. 죄송하지만 안되네요..;;
    제 cmd는 코드네임은 utf-8인데,
    mysql더 전부 utf-8이고, euckr로 굳이바꿀 이유가있나요?
    시키는대루했는데도 안된다능..ㅠㅠ

    1. 늦게 확인했네요.
      위의 내용은 클라이언트인 윈도우즈 cmd가 euc-kr이라서 수정했던 내용입니다.
      둘 다 utf-8이라면 굳이 변경안해줘도 정상동작할거 같은데요. 안된다면,
      왜 안되는지 저도 이유가 궁금해지네요 ^^;

댓글 남기기