본문 바로가기

Projects/Server

컴퓨터 - 활용 … MySql 5.0과 Tomcat / 한글 관련 문제

컴퓨터 - 활용 … MySql 5.0과 Tomcat / 한글 관련 문제
으으.. 일주일이 넘도록 신경쓰지 못했던 문제를 드디어 처리했다.
사건의 발단은 양질(?)의 수업을 제공하는 DB 과목 프로젝트..

1. MsSQL과 Tomcat으로 제작할까 하다가 Ym형이 mySql도 5.0부터 Procedure를 제공하는것을 발견. 실제 돌아가고 있는 서버에 설치하는것이 플러스 요소가 될것이라는 판단에 이쪽으로 결정.

2. 하지만 전에 돌던 MySql은 4.0.x였다. 5.x 알파 버전 설치 후 패스워드가 먹히지 않는 문제가 발생.. 메뉴얼을 뒤져서 old_password를 사용해야 한다는걸 알아냈으나 나중에 검색해보니 한글로 된 글도 이미 몇건 있었음.. -_-

# mysqld_safe --old_password &

이런식으로 적어줘야 4.1 이전 버전의 패스워드를 계속 사용할 수 있다. 제로보드 역시 비슷한 문제로 약간의 수정, install.php도 수정.

3. Stored Procedure
원래는 이게 정상적으로 동작해야 하지만, 뭘 잘못했는지 컴파일 버전으로는 도무지 저장/불러오기가 되지 않아 어쩔 수 없이 바이너리 버전을 사용하게 됐다.

4. 또 하나의 문제점은 character set. 4.1 이후 버전부터 euc_kr이 euckr로 바뀌었고, mySql 관련 작업을 할 때마다 항상 옵션을 붙여주어야 한다는 점이었다.
  • mysqld 구동시
    전까지는 euc_kr 옵션으로 컴파일을 해서 기본값으로 사용했지만, 4.1 이후 버전부터는 구동시에 character set 옵션을 항상 적어주어야 한다. (..라기 보다는 적어주는게 속 편하다. 더군다나 바이너리 버전이기 때문에 디폴트값은 latin1, 선택의 여지는 없다.)
    그래서 결론은,

    # mysqld_safe --character-set-server=euckr --default-character-set=euckr \
    --character-sets-dir=/usr/local/mysql/share/mysql/korean --language=korean \
    --old-password &


    --default-character-set 이 --character-set-server 로 대체되었다고는 하는데, 아무래도 메뉴얼을 뒤적여보면 이 옵션이 또 필요한 곳이 몇몇 군데 계속 나온다.

  • mysql 클라이언트 접속 시
    전에는 mysql -u namida -p 이런식으로만 접근했었지만, 이러면 character_set_result, character_set_client 변수가 latin1이기 때문에 쿼리문이나 결과문 모두 한글이 깨져나오게 된다. 따라서 mysql 실행 후, mysql> SET NAMES=euckr 명령을 한번씩 수행해주어야 했는데, 심각한건 php, jsp등에서 쿼리문을 수행하기 전에 이짓(?)을 한번씩 해주어야 한다는 것이다. 하지만 이 경우 그 세션에서만 해당 상태가 유지되고, 매번 연결시마다 SET 명령을 내려야 하는 방식이었다. 하지만 그 해결책은 역시 있었고, 몇번의 시행착오와 검색의 도움으로 해결할 수 있었다. 아래에 해결책이 있다.

    # mysql -u namida -p --default-character-set=euckr

    그냥 이런 옵션을 붙여서 클라이언트 환경을 한글로 유지할 수 있다는 것을 알게 해준다. 하지만 매번 저런 옵션을 칠 수는 없는 노릇이므로 환경설정 파일에 내용을 추가해준다.

    mysql 설치후 복사한 /etc/my.cnf 파일에서 [mysql], [client], [mysqldump] 부분에 default-character-set=euckr 행을 추가해주면 된다.

    # vi /etc/my.cnf
    [mysqld]
    port   = 3306
    socket   = /tmp/mysql.sock
    .. (생략)
    default-character-set=euckr

    [client]
    ..
    default-character-set=euckr

    [mysqldump]
    ..
    default-character-set=euckr


  • mysql/J (JDBC) 접속시
    가장 핵심적으로 고생을 시켰던 부분.. 막상 위 환경을 다 해결하고 JSP 페이지에서 한글 데이터를 insert를 해 보니 data truncation warning과 함께 물음표들이 잔뜩 들어가 있었다.

    메뉴얼을 찾아보니 4.1 이후 버전부터는 connection을 얻을때도 character set을 명시해줘야 했다.. (너무 복잡해..)

    Connection Conn = DriverManager.getConnection("jdbc:mysql://localhost/DB이름?characterEncoding=euckr&useUnicode=true&mysqlEncoding=euckr","아이디","패스워드");

    그러나 접속 문제를 해결하고나서도 물음표들은 없어지지 않았고 안되겠다.. 라는 생각이 드는 순간 문득 CLASSPATH를 살펴보니 아래와 같았다.

    # env |grep CLASS
    CLASSPATH=.:/usr/local/jdk/lib/tools.jar:/usr/local/tomcat/common/lib/mysql-connector-java-2.0.14-bin.jar
    #

    ..
    젠장!! connector 풀네임을 경로로 잡아놓고 있었다. 어쩐지 3.1이랑 3.2버전 다 넣어줘도 안되더라 했더니.. 즉시 2.0은 삭제하고 3.1로 대체, 경로 역시 나중에 같은 실수를 범하지 않기 위해 /usr/local/tomcat/common/lib/ 까지만 잡아줬다.

    Tomcat 재시작.. euckr 설정과 함께 정상적으로 삽입됐다. 휴..
닫기..

** DB 구동시 :
# mysqld_safe --old-password --character-set-server=euckr --default-character-set=euckr --character-sets-dir=/usr/local/mysql/share/mysql/korean --language=korean &
** 클라이언트(mysql 프롬프트) 접속 시 :
/etc/my.cnf 파일의 [mysql], [client], [mysqldump] 부분에 default-character-set=euckr 행을 추가해준다.

만약 서버에 설정이 되어있지 않다면 다음과 같이 접속한다.
$ mysql -u namida -p --default-character-set=euckr
** JDBC (MySql/J Connector)
3.1 버전을 사용한다 ㅡㅡ;
mysql-connector-java-3.1.8-bin.jar 파일을 CLASSPATH 가 있는 디렉토리에 넣어주면 된다. 다운로드는 MySql 홈페이지에서..


출처 : http://namida.pe.kr/tt/index.php

'Projects > Server' 카테고리의 다른 글

RHEL4 복제품인 CentOS4와 오라클 10g설치  (0) 2007.02.16
Remote Administrator  (0) 2007.02.14
Installing Oracle, PHP, and Apache on Linux  (0) 2006.09.23
proftpd 계정설정  (0) 2006.09.16
php 업로드 용량 제한 변경하기  (0) 2006.09.16