본문 바로가기
3.6. CICD/Docker

[Docker] Mysql 컨테이너 한글이 입력이 안되는 경우

by Dohi._. 2025. 3. 26.
728x90

증상

Docker Mysql 컨테이너를 실행하여 mysql은 잘 실행이 되고 있었으나

insert를 위해서 한글을 입력하고자 할때

Mysql 콘솔에서 한글이 입력되지 않는 경우였습니다.

INSERT INTO test(user_name)  VALUES('춘식이');

을 입력을 하거나 복사 붙여넣기를 하면

INSERT INTO test(user_name)  VALUES('');

로 되는 상황이 발생하였습니다.

해결 순차적 정리

1. 컨테이너 내부 접속

  1. 실행 중인 컨테이너 확인
docker ps docker exec -it container_name bash
  1. mysql에 접속후 클라이언트 문자셋확인
mysql> SHOW VARIABLES LIKE 'character\_set\_%';

+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.4/charsets/ |
+--------------------------+--------------------------------+

uf8로 잘되어있었기 때문에 터미널 쪽 문제라고 확신하였습니다.

  1. 도커 OS 확인
cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="9.5"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="9.5"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Oracle Linux Server 9.5"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:9:5:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 9"
ORACLE_BUGZILLA_PRODUCT_VERSION=9.5
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=9.5

Oracle Linux Server인걸 확인했으니

dnf 혹은 microdnf를 사용해서 한국말을 설치해보도록 하겠습니다.

주로 도커 컨테이너에서 저는 microdnf를 먼저 시도해보는데 그이유는 경량화 컨테이너의 경우 microdnf를 지원하는 경우가 많기 때문입니다.

  1. 터미널 언어 확인
locale

# 출력
   LANG=
    LC_CTYPE="POSIX"
    LC_NUMERIC="POSIX"
    LC_TIME="POSIX"
    LC_COLLATE="POSIX"
    LC_MONETARY="POSIX"
    LC_MESSAGES="POSIX"
    LC_PAPER="POSIX"
    LC_NAME="POSIX"
    LC_ADDRESS="POSIX"
    LC_TELEPHONE="POSIX"
    LC_MEASUREMENT="POSIX"
    LC_IDENTIFICATION="POSIX"
    LC_ALL=

posix인걸 확인할 수 있습니다

  • POSIX (Portable Operating System Interface)
    • 미국 IEEE에서 만든 운영 체제 인터페이스에 대한 표준
    • 주 목적은 유닉스 계열 시스템 간의 호환성을 보장
# 입력
microdnf install -y langpacks-ko

locale -a

//출력값
C
C.utf8
POSIX
ko_KR.euckr
ko_KR.utf8

# 입력
export LANG=ko_KR.UTF-8
export LANGUAGE=ko_KR:ko
export LC_ALL=ko_KR.UTF-8

locale

//출력값
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=ko_KR.UTF-8

어? C.utf8로 해도 되는거 아닌가..?

맞습니다 사실 설치 하지 않고 C.utf8로 진행하여도 됩니다 필요하다면 C.utf8로 진행하셔도 됩니다

export LC_ALL="C.UTF-8"
export LANG="C.UTF-8"

 

지금 방법은 다시 재접속을 진행할경우 리셋이 진행됩니다

사실 직접 insert하는 경우는 많이 있지 않아서 저는 이렇게 진행하였습니다

 

다른 좋은 방법이 잇다면 댓글로 달아주세요:)

728x90

댓글