728x90
증상
Docker Mysql 컨테이너를 실행하여 mysql은 잘 실행이 되고 있었으나
insert를 위해서 한글을 입력하고자 할때
Mysql 콘솔에서 한글이 입력되지 않는 경우였습니다.
INSERT INTO test(user_name) VALUES('춘식이');
을 입력을 하거나 복사 붙여넣기를 하면
INSERT INTO test(user_name) VALUES('');
로 되는 상황이 발생하였습니다.
해결 순차적 정리
1. 컨테이너 내부 접속
- 실행 중인 컨테이너 확인
docker ps docker exec -it container_name bash
- 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로 잘되어있었기 때문에 터미널 쪽 문제라고 확신하였습니다.
- 도커 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를 지원하는 경우가 많기 때문입니다.
- 터미널 언어 확인
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
댓글