티스토리 뷰

목차

    M1 용으로 도커를 다시 설치하게 되어, 기존 컨테이너들이 사라지게되어 MySQL을 다시 설치하게 되었습니다.

    MySQL을 설치하고 한글 인코딩 설정하는 방법을 알아보도록 하겠습니다. 

    1. MySQL 이미지 다운로드 및 컨테이너 실행

    docker pull을 해보면 에러가 발생합니다. --platform 으로 플랫폼을 명시해주면 정상적으로 mysql 이미지를 받을 수 있습니다.

    ➜  ~ docker pull mysql:8.0.28
    8.0.28: Pulling from library/mysql
    no matching manifest for linux/arm64/v8 in the manifest list entries
    
    ➜  ~ docker images
    REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
    
    ➜  ~ docker pull --platform linux/amd64 mysql:8.0.28

    MySQL 컨테이너를 생성&실행 할 때도 플랫폼을 명시해줍니다.

    ➜  ~ docker run --platform linux/amd64 --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.28

    2. MySQL 한글 설정

    아래와 같이 컨테이너의 bash를 수행해 mysql에 접속하여 database를 만듭니다.

    ➜  ~ docker exec -it mysql bash
    ➜  ~ mysql -uroot -p1234
    
    mysql> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    한글 데이터를 넣고 확인해보면, ???? 로 데이터가 표시되는 것을 확인할 수 있습니다.

    character_set을 확인해보면, latin1 값으로 되어 있습니다.

    이걸 utf8로 변경해줘야 한글 데이터가 정상적으로 표현이 됩니다.

    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                       | utf8mb3                        |
    | character_set_filesystem                     | binary                         |
    | character_set_results                        | latin1                         |
    | character_set_server                         | utf8mb4                        |
    | character_set_system                         | utf8mb3                        |
    | character_sets_dir                           | /usr/share/mysql-8.0/charsets/ |
    | check_proxy_users                            | OFF                            |
    | collation_connection                         | latin1_swedish_ci              |
    | collation_database                           | utf8_general_ci                |
    | collation_server                             | utf8mb4_0900_ai_ci             |
    | completion_type                              | NO_CHAIN                       |
    | concurrent_insert                            | AUTO                           |
    | connect_timeout                              | 10                             |
    | connection_memory_chunk_size                 | 8912                           |
    | connection_memory_limit                      | 18446744073709551615           |
    | core_file                                    | OFF                            |
    | create_admin_listener_thread                 | OFF                            |
    | cte_max_recursion_depth                      | 1000                           |
    +----------------------------------------------+--------------------------------+

    아래와 같이 my.cnf 파일을 열어줍니다.( vi가 설치되어 있지 않은 경우에는, 컨테이너 vi설치 글을 참조하여 설치합니다. )

    $ docker exec -it mariadb bash
    root@74c163276af6:/# cd /etc/mysql
    root@74c163276af6:/etc/mysql# vi my.cnf

    my.cnf에서 아래 내용을 추가하여 저장합니다.

    [client]
    default-character-set = utf8
    
    [mysqld]
    init_connect = "SET collation_connection = utf8_general_ci"
    init_connect = "SET NAMES utf8"
    character-set-server = utf8
    collation-server = utf8_general_ci
    
    [mysql]
    default-character-set = utf8

    다시 인코딩 정보를 확인해보면, latin1으로 되어있던 것들이 utf8로 변경된 것을 확인할 수 있습니다.

    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                         | utf8mb3                        |
    | character_set_connection                     | utf8mb3                        |
    | character_set_database                       | utf8mb3                        |
    | character_set_filesystem                     | binary                         |
    | character_set_results                        | utf8mb3                        |
    | character_set_server                         | utf8mb3                        |
    | character_set_system                         | utf8mb3                        |
    | character_sets_dir                           | /usr/share/mysql-8.0/charsets/ |
    | check_proxy_users                            | OFF                            |
    | collation_connection                         | utf8_general_ci                |
    | collation_database                           | utf8_general_ci                |
    | collation_server                             | utf8_general_ci                |
    | completion_type                              | NO_CHAIN                       |
    | concurrent_insert                            | AUTO                           |
    | connect_timeout                              | 10                             |
    | connection_memory_chunk_size                 | 8912                           |
    | connection_memory_limit                      | 18446744073709551615           |
    | core_file                                    | OFF                            |
    | create_admin_listener_thread                 | OFF                            |
    | cte_max_recursion_depth                      | 1000                           |
    +----------------------------------------------+--------------------------------+

    이제 MySQL 컨테이너를 재시작하고 데이터를 조회하면 한글이 정상적으로 나오는 것을 확인 할 수 있습니다.

    docker stop mariadb
    docker start mariadb

     

     

     

    'Database' 카테고리의 다른 글

    SQL WHERE의 AND, OR 우선 순위  (0) 2021.10.01
    Mac에서 Docker MariaDB 설치 및 한글설정  (1) 2021.09.09
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/12   »
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31
    글 보관함