1. MySQL 데이터베이스 및 테이블의 문자 인코딩 설정 확인
MySQL에서 한글이 깨지지 않도록 하기 위해서는 데이터베이스와 테이블의 문자 인코딩이 UTF-8로 설정되어 있어야 합니다.
-- 데이터베이스의 인코딩 확인
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
-- 테이블의 인코딩 확인
SHOW TABLE STATUS WHERE Name = 'your_table_name';
-- 컬럼의 인코딩 확인
SHOW FULL COLUMNS FROM your_table_name;
서버의 문자 셋 확인 방법
------------------------------------------------
--1. MySQL 서버의 문자셋 확인
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
--결과 값은 다음과 같아야 함
--character_set_server 값이 utf8mb4
--collation_server 값이 utf8mb4_unicode_ci
------------------------------------------------
--2. 클라이언트와 연결 관련 설정 확인
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_results';
SHOW VARIABLES LIKE 'character_set_connection';
--결과 값은 모두 utf8mb4 이어야 함
------------------------------------------------
--3. 테이블 및 컬럼의 문자셋 확인
SHOW CREATE TABLE your_table_name;
-- 포함내용 CHARSET=utf8mb4
2. MySQL 연결 설정 확인
MySQL 연결 시 사용하는 JDBC URL에도 characterEncoding=UTF-8 설정이 필요합니다. 예를 들어, JDBC URL이 다음과 같다면:
jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8
이 설정이 누락되면, MySQL과 애플리케이션 간의 데이터 전송 시 인코딩 문제가 발생할 수 있습니다.
3. MySQL 테이블 및 컬럼 인코딩 변경
만약 데이터베이스나 테이블, 컬럼의 인코딩이 UTF-8로 설정되어 있지 않다면, 이를 변경해야 합니다.
-- 데이터베이스 인코딩 변경
ALTER DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 테이블 인코딩 변경
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 컬럼 인코딩 변경
ALTER TABLE your_table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. JSP 및 서버 설정
이미 JSP 파일과 Tomcat의 server.xml에 UTF-8 설정이 되어 있는 것처럼 보입니다. 이 설정들이 올바르다면 JSP 파일에서 한글은 정상적으로 표시되어야 합니다. JSP 페이지에서 <%@ page contentType="text/html; charset=UTF-8" %>를 명시한 것처럼, 모든 JSP 파일에서 일관되게 UTF-8 인코딩을 사용해야 합니다.
5. Tomcat Connector 설정
Tomcat의 server.xml에서 URIEncoding="UTF-8" 및 useBodyEncodingForURI="true" 설정을 이미 추가하셨습니다. 이것은 GET 요청에 대해 URI 인코딩이 올바르게 처리되도록 보장합니다.
6. 데이터베이스에 이미 저장된 데이터
만약 인코딩이 잘못된 상태에서 데이터가 이미 저장되었다면, 저장된 데이터를 다시 UTF-8로 변환해주어야 합니다. 단순히 설정만 바꾸는 것으로는 이미 깨진 데이터를 복구할 수 없습니다. 이런 경우에는 데이터를 새로 입력하거나, 별도의 스크립트를 사용하여 데이터를 변환해야 합니다.
위의 사항들을 확인하고 필요한 경우 설정을 수정하면, 한글이 깨지는 문제를 해결할 수 있을 것입니다.
7. 서블릿 에서 인코딩 설정
@WebServlet("/comment")
public class CommentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// POST 요청에서의 인코딩 설정
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
jsp 에서
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
8. MySQL JDBC 드라이버 인코딩 설정 확인
String url = "jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8";
9. MySQL 서버 설정 확인
MySQL 설정 파일(my.cnf 또는 my.ini)에서 다음과 같은 설정을 추가하거나 수정
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
10. JSP 파일에서 POST 방식의 인코딩 설정
JSP 파일에서 form 태그에 accept-charset="UTF-8" 속성을 추가하여 POST 요청의 인코딩을 명시적으로 설정할 수 있습니다.
<form action="comment" method="post" accept-charset="UTF-8">
11. web.xml 확인
<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>
<init-param>
<param-name>ignore</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'코딩ㆍ개발 정보 > 데이터베이스 연습' 카테고리의 다른 글
MSSQL 서버 설치 후 구성 관리자 설정 및 방화벽 설정 방법 (0) | 2025.01.15 |
---|---|
[MySQL] 테이블과 내용 다른 데이터베이스로 복사하기 (0) | 2024.08.21 |
[MSSQL] 특정 구간 날짜, 시간 구하기 쿼리 (0) | 2024.07.18 |
MSSQL 에서 password 컬럼에 SHA2_256 수동 업데이트 하기 (0) | 2024.07.08 |
MSSQL 저장 프로시저 내용 검색하기, 소스 보는 방법 (0) | 2024.06.25 |
댓글