[서블릿/JSP] mysql JDBC이용시 한글 저장 안될 때

피오·2021년 7월 13일
0

본 포스트는 mysql 5.7.34 / 톰캣 8.5 / 웹모듈 3.1 / 자바 8을 기준으로 작성하였습니다.

위와 같은 화면에서 <form>태그를 이용해 서블릿으로 데이터 넘겨 mysql에 데이터를 저장하고자 한다. 한글을 입력해 저장한 후 조회해서 웹으로 출력해보니 이런 결과가 나왔다.

name과 title필드에 한글이 깨진 채로 저장이 된 걸 볼 수 있다. 어딘가 utf8 세팅을 해줘야겠는데.. 처음엔 mysql에 한글 저장이 안되고 있나 생각해봤는데, 이건 이미 해결한 문제였고(mysql cmd에서 한글 저장 안 될 때(작성예정)),
서블릿 doPost에 넘어온 데이터를 println으로 출력해보니 request객체에서부터 한글이 깨져있었다.

해결책

1. request.setCharacterEncoding("utf-8");

jsp나 html에서 넘어온 request객체를 서블릿에서 encoding해주자.

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
        ...
}

2. ?useUnicode=true&characterEncoding=utf8

JDBC 데이터베이스 접속 url에 위 문장을 추가하자.

"jdbc:mysql://localhost:3306/db명?useUnicode=true&characterEncoding=utf8"; 

jsp파일에서 charset을 다 빼도 잘 저장되는 걸 보면 위 두 가지만 제대로 해줘도(둘 다 해야한다) 웹에서 한글 저장하는 데 문제는 없을 것같다.
profile
블로그 이전했습니다. https://pzbg.tistory.com/

0개의 댓글