도커 내에서 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"
...
'MySQL(DB)' 카테고리의 다른 글
[바미] MySQL JSON 데이터 조회 (0) | 2024.11.21 |
---|---|
[바미] .ibd과 .frm파일은 쿼리로 삭제하자! (1) | 2024.11.20 |
[바미] 정상적인 SELECT 문을 사용했는데 syntax 에러가 발생할 때 (0) | 2024.10.14 |
[바미] There is no physical unique key defined. 에러 (0) | 2024.10.04 |
[바미] 데이터베이스 - Join (0) | 2024.07.28 |
도커 내에서 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"
...
'MySQL(DB)' 카테고리의 다른 글
[바미] MySQL JSON 데이터 조회 (0) | 2024.11.21 |
---|---|
[바미] .ibd과 .frm파일은 쿼리로 삭제하자! (1) | 2024.11.20 |
[바미] 정상적인 SELECT 문을 사용했는데 syntax 에러가 발생할 때 (0) | 2024.10.14 |
[바미] There is no physical unique key defined. 에러 (0) | 2024.10.04 |
[바미] 데이터베이스 - Join (0) | 2024.07.28 |