ETC

[mysql/mariadb] database 인코딩 utf8로 설정하기

lim 2022. 3. 21. 22:00
반응형

 

 

일단 DB에 접속해서 characterset 인코딩설정을 확인해보자.

 

MariaDB [(none)]> status

mysql  Ver 15.1 Distrib 10.5.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:          30220
Current database:
Current user:           nobody@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.5.13-MariaDB-1:10.5.13+maria~focal mariadb.org binary distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /run/mysqld/mysqld.sock
Uptime:                 40 days 18 hours 43 min 19 sec

 

 

status 명령어로 보니 현재 Server와 DB 캐릭터셋은 utf8mb4

Client/Conn 캐릭터셋은 latin1이다. 

 

이 경우 mysql 클라이언트를 통해서 INSERT로 한글 데이터를 넣는 경우 꺠지는 문제가 발생한다. 이러한 문제를 해결하기 위해서 Client/Conn 캐릭터셋을 맞춰주기로 했다.

 

일단 각각의 차이부터 알아보자.

 

Server characterset : 데이터 베이스 생성시 기본값이 없을 경우, 이 값으로 캐릭터셋 설정

DB characterset : 테이블 생성시 기본값이 없을  경우, 이 값으로 캐릭터셋 설정

Client characterset : 클라이언트 인코딩 설정

 

해당 인코딩을 변경하는 방법은 크게 두가지가 있다.

 

 

 

1. 명령어를 통한 변경(세션 레벨이라 일시적임)

>set names utf8

> status
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8
Conn.  characterset:    utf8

 

set names를 통해 변경이 가능하지만, 세션 레벨이라 일시적이다. 즉 mysql 클라이언트를 끊고 다시 접속하면 해당 설정은 사라진다.

 

 

2. 설정 파일에 인코딩 명시

/etc/my.cnf 파일에 캐릭터셋을 명시한후 mysql을 재구동하면 설정을 반영구적으로 가져갈 수 있다.

 

>> vim /etc/my.cnf

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

위 설정들을 추가해주고 재구동 하면, 데이터베이스의 인코딩 설정이 변경된 것을 확인할 수 있다.

 

 

반응형