UTF-8 Spring MVC + Mybatis + MYSQL
앞서 구현하였던 CRUD를 완성하여 테스트를 하던 중에 UTF-8
문제를 직면하였다..
값을 입력할때 한글만 넣으면 ?로 값이 들어가서 원인을 파악하던 중에 log에서는 sql에서는 문제가 없다는 것을 발견하고 디버그를 한 결과 Mybatis에서 Mysql로 넘어갈때의 문제로 밝혀졌다.
찾다보니 단순하게 web.xml에서 설정하였던 부분 외에도 Mysql, tomcat까지도 설정을 해줘야하는 부분이 있어서 쉽게 정리해보았다.
Mac
기준으로 설명하겠습니다.
설정 순서 설명
- web.xml
- Mysql 설정
- jsp 설정
- root-context.xml
- Tomcat의 server.xml
web.xml 설정
앞의 SpringMVC 프로젝트를 생성하면 webapp/WEB-INF/web.xml이 존재하는데 그 안의 UTF-8 filter를 추가해 줘야한다.
1 | <filter> |
Mysql 설정
Mysql은 terminal에서 직접접속하여서 내부의 encoding setting을 변경해줘야한다.
1 | cd /usr/local/mysql/bin |
status를 입력하면 현재 상태가 나오게된다.
이때 latin1을 utf8로 변경을 해줘야하는데 임시적 방법과 영구적인 방법이 존재한다.
임시적 방법
1 | SHOW VARIABLES LIKE 'c%' |
영구적 방법
/usr/local/etc 안에 my.cnf 파일이 없을 경우 /usr/local/mysql/support-files my-default.cnf 설정 파일을 복사해서 생성한 후에 mysql를 재실행해준다.
1 | [client] |
jsp 설정
최상단과 head tag 사이에 한줄씩 추가해주면 된다.
1 | <%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> |
root-context.xml 설정
이 부부을 통해서 Mysql를 연결하는데 여기서 url의 value 부분을 해결하기 위해서 시간이 오래 걸렸었다.
1 | <!-- Mysql Connection --> |
&란? & 기호 자체를 표현해 주기 위해서는 & 를, & 로 표현해야한다.
Tomcat server.xml 설정
64번째 줄에 UTF-8를 추가해주면 된다.
1 | <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> |
이렇게하면 UTF-8 설정이 완료가 된다.