Tomcat 에서 JDBC 를 이용하여 MySQL 에 한글로 된 정보를 저장할 때 겪었던 인코딩 관련 문제 경험을 바탕으로 몇 가지 문제에 대해 정리한 글이다.
Tomcat response
Java Servlet 작성 시 한글 인코딩이 깨져서 출력되는 경우 해결법.
doPost 또는 doGet 에서 아래와 같은 코드를 추가하여 해결 할 수 있음.
Filter 를 이용하여 변경하면 매번 입력할 필요는 없음.
response.setContentType("text/html; charset=utf-8");
JDBC MySQL
JDBC 를 이용하여 MySQL 데이터를 삽입 할 때 한글이 ??? 와 같이 저장되는 경우 해결법.
원인 :
JDBC 에서 MySQL 에 데이터를 저장 할 때 latin1 인코딩으로 통신하기 때문에 발생.
해결방법 :
Connection 객체 생성시 db url 뒤에 유니코드 사용 및 인코딩을 설정하여 줌.
String url = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8";
Connection con = DriverManager.getConnection(url, "id", "password");
JDBC java.sql.SQLException
java.sql.SQLException 이 발생할 경우 해결법
원인 :
MySQL 의 인코딩이 기본으로 latin1 로 설정되어 있기 때문에 발생.
해결방법 :
mysql/my.cnf 또는 mysql/my.ini 를 편집해 줌으로써 MySQL 의 인코딩을 변경해 주는 방법도 있으나, Table 을 생성할 때 기본 문자 인코딩 값을 지정해 주는 것이 더 쉽게 해결 할 수 있음.
CREATE TABLE table_name (
col1 VARCHAR(100) ,
col2 VARCHAR(100) ,
) DEFAULT CHARSET=utf8;
References
- MySQL 인코딩 변경 관련 링크
http://lvsin.tistory.com/176
http://appletree.or.kr/blog/notes/mysql의-기본-인코딩default-encoding을-utf8으로-설정하기
http://dev.mysql.com/doc/refman/4.1/en/charset.html
- MySQL 인코딩 변경 명령어
현재 캐릭터 셋 확인
mysql>show variables like 'char%';
변경
mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
mysql> SET character_set_connection = utf8;
mysql> ALTER DATABASE DB명 DEFAULT CHARACTER SET utf8;