[Java] UTF-8 캐릭터셋(Charset) 문제 해결
- Language/Java
- 2018. 3. 28.
Mysql로 개발을 할 때, 다양한 이유로 인해서 캐릭터셋이 깨지는 경우가 발생한다. DB설정의 문제일수도 있고, Table을 생성할 때 문제일수도 있고, 혹은 Web 단에서 파라미터 전송시 캐릭터셋을 제대로 지정하지 않아서 생길 수 있는 문제도 있다. 이러한 다양한 캐릭터셋 문제를 해결하기 위한 팁들을 포스팅해보고자 한다
톰캣(Tomcat)에서 파라미터가 깨질 경우
흔하디 흔한 방법이다. 톰캣에서 8080 포트에서 캐릭터셋을 지정하면 파라미터가 UTF-8로 인코딩 된다.
1 | <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> |
스프링(Spring)에서 캐릭터가 깨질 경우
스프링에서 개발을 할 때, 캐릭터를 위한 필터링을 web.xml에 설정할 수 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SetCharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
JDBC Connection에서 UTF-8 설정을 놓쳤을 경우
순수하게 Mysql과 커넥션을 맺고, 데이터를 가져올 때 URL에 UTF-8 설정을 빼서 데이터가 깨지는 경우가 있다.
AS-IS
1 | jdbc:mysql://localhost:3306/test |
TO-BE
1 | jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 |
위와같이, useUnicode=true&characterEncoding=UTF-8 설정을 추가로 넣자
MYSQL의 Table 생성 시, UTF-8로 설정 안되어 있을 경우
DB 테이블에 UTF-8 설정을 하지 않아서, 데이터가 깨져서 들어가는 경우가 있다. 자주 하는 실수이고, 타 DBMS 유저들은 헤맬 수 있는 부분이니 꼭 확인해야 한다
1 2 3 4 5 | CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL, `title` varchar(100) NULL DEFAULT '', PRIMARY KEY (`id`) )ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
위와같이 엔진(engine) 설정과 함께 캐릭터셋(charset)도 설정할 수 있다
MYSQL의 캐릭터셋 설정
1 2 3 4 5 6 7 8 9 10 11 | [client] port=3306 default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8 |
/etc/mysql/my.cnf 파일을 열어서, 위와 같이 설정하고 Mysql을 재기동하면 캐릭터셋 설정이 변경되어 진다
'Language > Java' 카테고리의 다른 글
[Java] Split시 공백 처리 방법 (6) | 2019.05.21 |
---|---|
[Java] List/배열값 한줄로 SUM (0) | 2019.01.16 |
[JAVA] 랜덤 문자열 생성 방법 (0) | 2018.12.24 |
[JAVA] 소수점 자리수 이쁘게 보여주기 (0) | 2018.12.04 |
Java에서 Properties 사용법 (0) | 2017.04.24 |