|
2006년 10월 03일
제목을 적는데 무척 고민했습니다.
누군가가 웹의 자료를 검색 했을때 쉽게 찾고 정확한 자료를 제공해 주고 싶기 때문입니다. 이 글의 제목을 '인코딩 문제'가 아닌 '한글 문제'라고 적는게 검색하는 사람들에게 더 도움이 될 듯하지만 정확하게 말하자면 한글만의 문제가 아닌 인코딩 문제이기 때문입니다. (은근슬적 본문에 '한글 문제'라고 적는 재치!) 문제점EUC-KR이 기본 문자셋인 MySQL에 JDBC로 아래와 같이 접속하여 데이터를 삽입하면 한글이 깨져서 기록되는 문제가 발생합니다. String Url = "jdbc:mysql://주소:포트번호/DB이름"; Connection Conn = DriverManager.getConnection(Url, "아이디", "암호"); 해결방법우선 Connector/J 버전에 따라 아래의 내용이 맞지 않을 수 있습니다. 저는 MySQL 4.0.26, Connector/J 5.0.3 버전에서 테스트 하였습니다. String Url = "jdbc:mysql://주소:포트번호/DB이름"; String Property = "?characterEncoding=EUC_KR"; Connection Conn = DriverManager.getConnection(Url + Property, "아이디", "암호"); 2번 라인의 속성을 추가해줘야 MySQL이 데이터를 저장할때 EUC-KR로 파일에 저장됩니다. (※ EUC-KR이 아닌 EUC_KR 입니다. Connector/J의 버전에 따라 EUCKR인 것도 있습니다.) 잡다한 내용characterEncoding에 대해서는 아래와 같은 설명이 있습니다.(제가 영어를 너무 못해서 원문과 같이 올립니다. 번역보고 웃지 말아주세요.ㅠㅠ) If 'useUnicode' is set to true, what character encoding should the driver use when dealing with strings? (defaults is to 'autodetect') - 신뢰없는 해석 : useUnicode가 ture라면 문자열을 교환시 드라이버가 어떤 문자 인코딩을 사용하는지?(기본값은 자동찾기) useUnicode는 기본값이 true이므로 굳이 useUnicode=true&characterEncoding=EUC_KR 라고 쓸 필요는 없습니다. useUnicode에 대해서는 아래와 같은 설명이 있습니다. Should the driver use Unicode character encodings when handling strings? Should only be used when the driver can't determine the character set mapping, or you are trying to 'force' the driver to use a character set that MySQL either doesn't natively support (such as UTF-8), true/false, defaults to 'true' - 신뢰없는 해석 : 문자열 접근시 드라이버가 어떤 유니코드 문자 인코딩을 사용하는가? 드라이버가 문자를 매치시키지 못할때나, 문자셋 이용을 드라이버로 당신이 '강제' 시도할때 MySQL이 어느한쪽만을 지원하지 못하므로(UTF-8 처럼) 사용된다(?), true/false, 기본값은 'true'이다 죄송합니다. 제가 봐도 무슨 말인지 모르겠습니다. 번역을 신뢰하지 말아주세요. 왜 이런 문제가 발생하는 것일까요? 저도 이 부분이 궁금합니다. 나름대로 가설을 세워봤습니다. 우선 JSP 즉, JAVA에서 문자를 유니코드로 처리합니다. 넘어온 값의 인코딩이 무엇이던지 메모리에 저장되는건 유니코드 입니다. 이 유니코드 데이터를 MySQL에 전달할테고 MySQL은 데이터를 파일에 출력하기 위해서 적절한 인코딩을 선택할 것입니다. 그런데 MySQL은 데이터를 출력할 DB파일의 기본 인코딩이 무엇인지 알고 있을텐데 왜 깨져서 기록되는 것일까요? 이 문제에서 막혀버리고 말았습니다. 영어실력이 딸려서 이런 복잡한 부분은 찾아볼 엄두가 나지 않습니다. 누구 확실히 아시는 분이 계시다면 가르쳐 주시길 바랍니다. :) 이 유니코드 데이터를 MySQL은 바이트로 기록하기 위해 어떠한 인코딩으로 처리할 것인지 우리는 Connector/J의 characterEncoding에 원하는 인코딩을 설정하여 저장합니다. 불러올 때도 마찬가지로 MySQL에서 불러온 바이트 데이터를 JAVA의 문자열로 변환하기 위해서 인코딩을 알려주어야 합니다. #참고자료 http://dev.mysql.com/doc/connector/j/en/connector-j-reference-charsets.html MySQL to Java Encoding Name Translations.
|
ABOUT
이글루 파인더
카테고리
그냥 잡담
최근 등록된 덧글
아~ 무슨 말인가 했네요. ㅋㅋ
아마 20일..
by -A2- at 09/06 네... 쪼금;; by -A2- at 09/06 회사 워크샵 다녀오느라 3일간 인터넷을.. by -A2- at 09/06 생일 축하드려요. ^^ 저 위에 Dr.지.. by -A2- at 09/06 안녕하세요. 워크샵 갖다오느라 무척 늦.. by -A2- at 09/06 A2님 있잖아...! by 봄날 at 09/05 이런 효과를 누리려고 포스팅을 안하시.. by 명이 at 09/05 새 포스팅을 자제 하는 이유는 댓글 수 .. by Dr.지존 at 09/05 오늘은 퓨이 생일이에요 축하해주세요 .. by 퓨이 at 09/04 어제밤 앞자리에 아저씨랍니다. 어제는.. by tellmegame at 09/04 앗! 그런 생각은 못했어요. ㅡㅡa by -A2- at 09/04 에잉~ 요리 포스팅 자제한다니까요. ㅋㅋ by -A2- at 09/04 사랑빼고 다 아는 프로그래머.. 근데 여.. by 산골소년 at 09/03 A2님-------- 멋진! 포스팅이에요 .. by 퓨이 at 09/03 댓글이 일정수준 달릴때까지 새로운 포.. by -A2- at 09/03 어떻게 하면 댓글 46개 달리는거지? 사랑.. by Dr.지존 at 09/03 기연인가요? ^^; 제 블로그는 좀 잡다해.. by -A2- at 09/02 사랑빼고 다 아는 프로그래머;; by -A2- at 09/02 토닥토닥... by -A2- at 09/02 그렇다면 프로그래머가 되세요;; by -A2- at 09/02 최근 등록된 트랙백
.:.*.:.경 축.:.*.:. 올블로그 다독왕 ..
by 오늘도 감사의 이유는 86,400가지. 저도... by 900gle.info 숙취에 좋은 보리차에 밥말아 먹기. by 감성 일기 [맛] 오븐만 있으면 하는 통닭 바베큐 by 900gle.info 블로그 다독왕..... by wAck 전남 영광 시골 돼지고기로 뭉친 한 블.. by 서명덕기자의 人터넷 세상 ▶모든 블로.. 우사인 볼트.. 그가 100미터에서 마지막.. by monolog kz의 생각 by keizie's me2DAY 뭔가 나왔네요. - 올블로그 놀이터? by 블로그스터디 [아이모리 2.0 리뷰] 디카북이 도착.. by -kyoe- 하루세번 。。 와 닿는 글.. by For Dr.Zizone 올블의 소외된 블로거 일병 구하기 프.. by 마음의 안정을 찾기 위하여 베이컨 초밥 by 컴속의 나, 꽁트를 쓰다 A2의 알림 by ani2life's me2DAY A2의 알림 by ani2life's me2DAY 돈"많"아서 공부하는것이.. by keya.wo.tc :: 본진 메타푸의 생각 by metafoo's me2DAY 차명진왈, 노 대통령이 운영체제 개발 by 도아의 세상사는 이야기 택배회사를 고발합니다! 도와주세요!!!!! by 마음의 안정을 찾기 위하여 A2의 느낌 by ani2life's me2DAY 이전 블로그
라이프 로그
| ||||||||||||||||||||||||||||||||||||||||||||