오라클에서 입력/출력시 한글이 깨지는 문제. (혹은 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 |