728x90
반응형
728x170

도커 내에서 mysql 서버를 접속하여 DB들을 셋팅해주는데 DB 데이터를 넣는 것들 중 한글로 된 데이터들을 INSERT 할 때 ''으로 insert 되는 일이 있었습니다.

 

INSERT INTO tb_universityinfo 
(UnivName, UnivLocate, UnivType, UnivEstablish, UnivPresident, UnivCampos, UnivLateX, UnivLateY, UnivPageURL, UnivIMG, UnivLotAddr, UnivAddr, UnivMapIMG) 
VALUES
('서울대학교','서울특별시 관악구','국립 4년제','1946','유홍림','관악캠퍼스',37.4648267,126.9571988,'https://www.snu.ac.kr/index.html',
'https://lh5.googleusercontent.com/p/AF1QipNtOBTHBw3O1k_0MlPlDiJasjjI3jZwOoYGBLac=w426-h240-k-no','08826','서울특별시 관악구 관악로 1 ',
'https://lh5.googleusercontent.com/p/AF1QipNtOBTHBw3O1k_0MlPlDiJasjjI3jZwOoYGBLac=w426-h240-k-no');

위와 같은 쿼리를 입력하니 아래와 같은 쿼리로 인식하더군요.

mysql> INSERT INTO tb_universityinfo
    -> (UnivName, UnivLocate, UnivType, UnivEstablish, UnivPresident, UnivCampos, UnivLateX, UnivLateY, UnivPageURL, UnivIMG, UnivLotAddr, UnivAddr, UnivMapIMG)
    -> VALUES
    -> ('',' ',' 4','1946','','',37.4648267,126.9571988,'https://www.snu.ac.kr/index.html',
    -> 'https://lh5.googleusercontent.com/p/AF1QipNtOBTHBw3O1k_0MlPlDiJasjjI3jZwOoYGBLac=w426-h240-k-no','08826','   1 ',
    -> 'https://lh5.googleusercontent.com/p/AF1QipNtOBTHBw3O1k_0MlPlDiJasjjI3jZwOoYGBLac=w426-h240-k-no');
Query OK, 1 row affected (0.00 sec)

 

먼저 MySQL charset 설정을 먼저 확인해보았지만 uf8로 다음과 같이 문제없이 설정되고 있었죠.

mysql> show variables like 'c%';
+----------------------------------------------+----------------------------+
| Variable_name                                | Value                      |
+----------------------------------------------+----------------------------+
| caching_sha2_password_auto_generate_rsa_keys | ON                         |
| caching_sha2_password_digest_rounds          | 5000                       |
| caching_sha2_password_private_key_path       | private_key.pem            |
| caching_sha2_password_public_key_path        | public_key.pem             |
| character_set_client                         | latin1                     |
| character_set_connection                     | latin1                     |
| character_set_database                       | utf8mb4                    |
| character_set_filesystem                     | binary                     |
| character_set_results                        | latin1                     |
| character_set_server                         | utf8mb4                    |
| character_set_system                         | utf8mb3                    |
| character_sets_dir                           | /usr/share/mysql/charsets/ |
| check_proxy_users                            | OFF                        |
| collation_connection                         | latin1_swedish_ci          |
| collation_database                           | utf8mb4_unicode_ci         |
| collation_server                             | utf8mb4_0900_ai_ci         |
| completion_type                              | NO_CHAIN                   |
| concurrent_insert                            | AUTO                       |
| connect_timeout                              | 10                         |
| connection_memory_chunk_size                 | 8192                       |
| connection_memory_limit                      | 18446744073709551615       |
| core_file                                    | OFF                        |
| create_admin_listener_thread                 | OFF                        |
| cte_max_recursion_depth                      | 1000                       |
+----------------------------------------------+----------------------------+

 

그 후 도커 내부의 loacale 을 확인해보았고, 

locale
LANG=
LANGUAGE=
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로 설정되어 있는 것을 확인 한 뒤, 도커 내부의 locale이 문제였던 것을 발견하였습니다.

 

이를 위해 locales를 아래와 과정에 따라 설치, 설정 해주시면 완료됩니다.

 

먼저 도커 컨테이너 내부에서 아래 명령해줍니다.

apt-get update && apt-get install -y locales

 

설치 후 ko_KR.UTF-8 로캘을 추가해줍니다.

locale-gen ko_KR.UTF-8

 

 

그 후 로캘을 기본 설정으로 적용해줍니다.

update-locale LANG=ko_KR.UTF-8
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8

설정이 적용되었는지 확인해봅시다.

locale

 

아래와 같이 출력되면 DB에서도 한글 입력이 허용되어 한글 데이터도 입력이 될 겁니다.

LANG=ko_KR.UTF-8
LC_ALL=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
...
728x90
반응형
그리드형
Bami