Search

'mysql 한글입력'에 해당되는 글 2건

  1. 2007.03.07 mysql 문자셋 인코딩 관련
  2. 2006.10.18 컴퓨터 - 활용 … MySql 5.0과 Tomcat / 한글 관련 문제

mysql 문자셋 인코딩 관련

Projects/Server 2007.03.07 14:01 Posted by soulfree >동네청년<
기존 버전에서는 "euc-kr"로 표기되는 문자셋이 "euckr"로 바뀌었다.

/etc/my.cnf

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

JDBC Driver URL

jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=UTF8

현제 문자셋 정보 보기

show variables like 'c%';
- 결과
character_set_client : utf8
character_set_connection : utf8
character_set_database : utf8
character_set_results : utf8
character_set_server : utf8
character_set_system : utf8
character_sets_dir : /usr/share/mysql/charsets/
collation_connection : utf8_general_ci
collation_database : utf8_general_ci
collation_server : utf8_general_ci

이미 생성된 DATABASE의 문자셋 바꾸기

mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
mysql> SET character_set_connection = utf8;
mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8;

이미 데이터가 들어간 테이블의 문자셋 변환

create table test (merong varchar(20) collate latin1_general_ci);

이렇게 만들어진 테이블에 한글 데이터를 넣은 후 필드를 euckr 로 변경하려면
다음처럼 해야 합니다.

alter table test modify merong binary(100);
alter table test modify merong varchar(20) collate euckr_korean_ci;

binary 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야
합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다.
참조 : Database.sarang.net에 올라온 글

신고

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

Projects/Server 2006.10.18 14:51 Posted by soulfree >동네청년<
컴퓨터 - 활용 … 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

신고