본문 바로가기

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>

 

반응형

코카티비-CoCaTV

생활하면서 불편한 것들, 생활하면서 다음에 또 찾게 될 것 같은 것들, 기록 해뒀습니다.