반응형

MySQL과 JAVA를 연동하기 위해서는 JDBC를 이용하여 할 수 있다.
이렇게 JAVA와 연동을 하여 데이터를 저장, 삭제, 검색 등을 할 수 있는데,
여기서 문제점이 발생했었다. 영문은 아무 탈 없이 저장이 되는데 유독 :한글: 입력 시 깨짐현상이 발생된다.

이 부분에 있어서 여러 사이트를 보고, 책도 보고 했지만 결론을 내지 못했었는데, 오늘 그 현상을 해결해버렸다.

※ Java는 기본적으로 모든 문자열을 Unicode로 취급한다. 하지만 MySQL은 기본적으로 ISO-8859-1(latin1)로 인식해버린다. 이런 차이점이 있기에 한글에 깨져보이는 것이다.

여러가지 방법이 있는데 2가지 방법을 소개하겠다.

1. MySQL의 my.ini 수정하기

현재 나는 MySQL Server 5.0을 사용하고 있다.
C드라이브에 깔려진 MySQL폴더에 보면 my.ini 라는 파일이 있을 것이다.
이 파일을 열어 보면 Client Section에
[mysql]
default-character-set=latin1 <- 이부분의 latin1값을 euckr으로 바꾼다.가끔 어떤 블로그를 보면 euc-kr로 하라고 하는데 그렇게 변경하고 난 후 MySQL을 실행하면 창이 그냥 죽어버리는것을 알 수 있다, 오류메시지를 보면 euc-kr을 컴파일 할 수 없다는 내용이다. 그 내용을 찾아 MySQL\share\charsets 폴더에 들어가면 index.xml 파일이 있는데 그 안에 euckr로 명시 되어 있다. 그러니 euckr로 설정하기 바란다.

그런 후 역시나 Server Section에서도
[mysql]
찾이보면 default-character-set=latin1 이 부분이 있을텐데 이것을 default-character-set=euckr로 바꾸면 된다.

이렇게 해주면 이제 MySQL에서 한글을 저장 할 수 있게 된다.

2. Java 코드로 변환하기

위에서 말했듯이 Java와 MySQL의 기본 문자열 형식이 틀리다.
그렇기에 Java 코드를 통해 변환을 해주면 된다.

아래와 같은 메소드를 만들어 사용하면 된다.

/// MySQL에서 불러온 데이터를 Java에서 사용할 수 있는 Unicode로 변환
private static String toUnicode(String str) throws Java.io.UnsupportedEncodingException{
    return new String(str.getBytes("ISO-8859-1"));
}

/// Java에서 저장 할 데이터를 MySQL에서 사용할 수 있는 Latin1로 변환
private static String toLatin1(String str) throws Java.io.UnsupportedEncodingException{
    return new String(str.getBytes(), "ISO-8859-1");


참고) 1번은 개인적으로 실패를 통해 얻은 것이며, 2번은 한빛미디어 - 뇌를 자극하는 Java 21장에서 참고했습니다.
참조 사이트 : http://acedon.egloos.com/1668830
반응형

'Database > Mysql' 카테고리의 다른 글

[Link] Managing Hierarchical Data in MySQL  (0) 2010.11.09
MySQL Start, Stop  (0) 2010.10.29
mysql reload.  (0) 2009.04.08
between  (0) 2009.02.11
UNIQUE KEY  (0) 2009.02.11

+ Recent posts