Context
Table of Content
현재 상태 및 문제점
한글 인코딩 필요한 테이블
•
coupons
•
option_tb
•
product_tb
한글 인코딩 필요한 .sql 파일
•
03-coupon.sql
•
04-product.sql
docker-compose.yml
coupon-mysql:
image: ubuntu/mysql:edge
container_name: coupon-mysql
networks:
- coupon-network
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=coupon
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_USER=abcd
- MYSQL_PASSWORD=1234
- TZ=UTC
volumes:
- ./init-scripts:/docker-entrypoint-initdb.d # 디렉토리의 모든 스크립트 매핑
command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci", "--explicit_defaults_for_timestamp=1"]
Java
복사
DB 인코딩 상태 확인
SHOW VARIABLES LIKE 'character_set_%';
Java
복사
한국어로 보이려면 뭐로 보여야함? utf8mb4
utf8mb4는 완전한 UTF-8 인코딩을 지원하므로, 다국어 문자와 이모지를 포함한 다양한 문자를 처리할 수 있다.
해결방안
MySQL 초기화 스크립트 수정
./init-scripts 디렉토리의 .sql 파일에 UTF-8 BOM(Byte Order Mark)을 추가 및 UTF-8로 저장되었는지 확인
스크립트 내 문자셋 설정:
-- 데이터베이스와 연결 설정
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci';
USE `coupon`;
INSERT INTO `product_tb` (`id`, `product_name`, `description`, `image`, `price`)
VALUES (1, '기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전', '', '/images/1.jpg', 1000),
(2, '[황금약단밤 골드]2022년산 햇밤 칼집밤700g외/군밤용/생율', '', '/images/2.jpg', 2000),
...
SQL
복사
설명:
•
SET NAMES utf8mb4
◦
MySQL 클라이언트가 서버와 통신할 때 사용하는 문자 인코딩 방식을 설정한다.
◦
클라이언트가 서버로 데이터를 보낼 때와 서버에서 데이터를 읽을 때 모두 이 인코딩을 사용한다.
•
SET CHARACTER SET utf8mb4
◦
클라이언트에서 서버로 전달되는 데이터의 문자셋을 utf8mb4로 설정한다.
◦
결과적으로 클라이언트가 보낸 데이터가 utf8mb4로 변환되고, 서버에서 클라이언트로 보낼 때도 동일하게 처리한다.
•
SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci'
◦
데이터베이스 연결에서 사용할 기본 정렬(collation) 규칙을 설정한다.
◦
utf8mb4_unicode_ci는 utf8mb4 문자셋에 기반한 대소문자 무시(case-insensitive) 정렬 규칙을 제공한다.
결과
Related Posts
Search