IT_Programming/Java

DB 관련된 한글 처리 방법

JJun ™ 2008. 9. 8. 00:06

오라클에서 입력/출력시 한글이 깨지는 문제. (혹은 US7ASCII로 설치되어 있을 때, 가끔 다른 결과 출력)

MySQL은 한글 지원으로 제대로 컴파일 하지 않으면 정렬이 이상함.

 

# 해결책

   대부분 한글이 깨지는 경우 DB의 Charset과 프로그램의 Charset이 일치하지 않아서 발생

   한글의 경우 주로 ksc5601이나 euc-kr을 사용, 영어권은 ASCII나 ISO-8859-1 을 사용

  

   오라클에서 입출력시 한글이 깨진다면 100% 문자 변환이 잘못된 탓.

 

   입력시에는 euc-kr을 ISO-8859-1로, 출력시에는 ISO-8859-1을 euc-kr로 바꾸면 대부분 해결됨.

/*

    String s = "테스트 스트링";

    String n = new String(s.getBytes("euc-kr"), "ISO-8859-1");

*/

 

하지만 많은 경우 위와 같은 방법을 써도 깨지는 경우가 잇는데 이 경우 모든 1:1 대입을 해본다.

다음의 함수가 도움이 된다

 

/*
 * File : Code.java
 * Desc : CharSet change example result
 */

public class Code
{
 public static void charsetTest(String s)
 {
  try
  {
   String[] charset = {"euc-kr", "ksc5601", "iso-8859-1",
     "iso_8859_1", "ascii"};
   for(int i=0; i<charset.length; i++)
   {
    for(int j=0; j<charset.length; j++)
    {
     if(i==j)
      continue;
     System.out.print(charset[i] + " -> " + charset[j] +
       " : ");
     System.out.println(new String(s.getBytes(charset[i]), charset[j]));
    }
   }   
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }

 public static void main(String[] args)
 {
  charsetTest("한글 문자열");
 }

}

 

MySQL에서의 문제는 좀 다르다. 입출력은 잘 되는데 문제는 입력된 데이터들에 대해 정렬을 할 때 발생한다. 왜냐면 charset이 euc-kr로 지정되어 있지 않은경우 영문정렬은 제대로 되지만 한글 정렬은 뒤죽박죽이 되고 만다.

 

이 현상을 해결하기 위해서는 컴파일 시점에서 찾아야 되는데 MySQL을 컴파일 할 때 다음과 같은 옵션을

주어야 한다.

 

./configure --profix=/usr/local/mysql/ --with-charset=euc_kr

 

'IT_Programming > Java' 카테고리의 다른 글

JAVA Perfomance Tuning 1, 2, 3  (0) 2008.09.08
Java performance tips  (0) 2008.09.08
jpg, gif 파일의 크기 구하는 방법   (0) 2008.09.07
Java 기타 튜닝법   (0) 2008.09.07
JAVA Tip & Tuning Technic   (0) 2008.09.07