경호연
2003-04-15 14:59:48
7
8432

한글깨짐과 PreparedStatement


대충 두개에 대형 싸이트를 찾아 보았는데;

지금 제가 직면한 문제를 해결할 방도가 없더 군요....흑

---------------------------------------------------------------

.........

....

..

 getConnection();

  System.out.println("userName in DB ==" + userName);
  System.out.println("content in DB ==" + content);
  System.out.println("title in DB ==" + title);

  String query = "INSERT INTO "+gubun_story+" (sort, uid, uname, usex, email, home, title, content, sel_cnt, tag_yn, ip, writedate)   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now())";

  PreparedStatement pstmt = null;
  pstmt = db.prepareStatement(query);

  pstmt.setInt(1,sort);
  pstmt.setString(2,userID);
  pstmt.setString(3,userName);
  pstmt.setString(4,userSex);

..........................

...

..

------------------------------------------------------------------

위와 같이 System.out.println("한글"); 로 확인을 하면, 모두 정상적으로

한글 값이 넘어 옮니다. 그러나, pstmt.setString(1,한글); 부분에서 ? 표를

대신하는 부분에선 값이 한글이 깨져서 들어 갑니다. 도데체 이런 문제를 해결하신 분이 계시면, 많은 개발자들과 공유합니다,

 

 

하여튼, 한 해결 방법은 query문을 직접 ? ==? "+variables+"로 변경할람니다.

 

 

0
0
  • 답변 7

  • kenu
    2003-04-15 15:03:51
    System.out으로 나오는 코드셋과 jdbc를 통해서 전달되는 코드셋에 차이가 있을 수 있습니다.
    System.out으로 한글이 깨진상태라도 DB에는 제대로 들어 갈 수 있다는 뜻이죠.
    보고자 하는 위치에서 적절히 인코딩과 디코딩이 이루어져야 합니다.
    가능하면 인코딩 구문은 적을수록 좋습니다.
    0
  • 경호연
    2003-04-15 15:27:54
    구체적인 방법도 알려주실수 있나요?? 많은 분들이 필요해 할것 같으데........Kenu님
    0
  • 경호연
    2003-04-15 16:05:04
    참고로전 원격DB를 열어서 사용합니다. 이것이 지금 가장유력한 이유같네요....웹서버는 로컬에서 쓰고, 그러니 톰켓이 내부적으론 영어기준으로 설정되여있듯, MySql에서도 원격으로 처리할때 그와같은 기준이 있는 모양인듯??
    0
  • kenu
    2003-04-15 16:11:07
    그렇지는 않습니다. 환경적인 요소가 인코딩에 많이 작용합니다. 테스트를 많이 해서 확인하는 수밖에요. 제가 알고 있는 방법입니다.
    0
  • 경호연
    2003-04-15 16:28:52
    더 자세히 설명하면, 로그인 폼에서 입력하는 한글테이터들은 정상적으로 입력됨, 그러나 똑같은 DB밑에 있는 게시판 테이블에서는 위와같은 문제가(한글깨져서 DB입력됨)이 발생합니다.
    0
  • june
    2003-04-15 18:06:03
    저도 한글깨짐현상 때문에 고생 많이 해봤는데...System으로 출력해서 한글이 안깨진다고 DB에 입력할 때 안깨지는거는 아닌거 아지죠?
    한글 convert를 해보세요.
    new_str=new String(ko.getBytes("KSC5601"),"8859_1");
    이렇게 바꾸어서 해보세요.
    저는 mysql을 사용하는데 System.으로 찍어도한글이 괜찬아서 혹시나 반대로 바꿔보니 되더라구요.
    [추신] 저는 초짜니깐 너무 신용은 하지마세요 ^^;;
    0
  • 경호연
    2003-04-15 18:15:15
    june님 넘 고맙습니다...좀전에 해결하고, 공유하러 왔는데.......june님에 벌써 달아 놓으셨네요..
    String query = "insert into createtest values('"+new String("허광남2".getBytes("8859_1"), "euc-kr")+"', '017-111-2222')";
    저는 "ksc5601이 아니라 "euc-kr"로 했습니다. 두개가 다 한글을 지원규약인데, 자세한건 모름; 그래서 오늘에 결론은 ==> 한글에 한글두번 변화되어, 한번 더 역으로 뒤집어서 제대로 된 한글이 나오지 않나 싶습니다. 한글문자를 한글encoding으로 더 뒤집어놓으니, 이런 결과나 나오지 않나 싶습니다. 그렇다면, 영어와 한글은 상극이라는 것인가. 8859_1 가 표준영어폰트맞죠.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.