반응형
일단 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
위 설정들을 추가해주고 재구동 하면, 데이터베이스의 인코딩 설정이 변경된 것을 확인할 수 있다.
반응형
'ETC' 카테고리의 다른 글
[SQL] 특정 컬럼에서 가장 긴 문자열 찾는 SQL 쿼리 (0) | 2022.10.24 |
---|---|
[kubernetes] kubectl 명령어로 pod에 sql 쿼리 보내기 (0) | 2022.03.21 |
[kubernetes] cronjob 수행 중지 kubectl 명령어 (0) | 2022.02.12 |
워드프레스 도커 설치 방법을 상세하게 설명한 글 (0) | 2022.02.06 |
[SQL] 데이터 SELECT/INSERT/UPDATE/DELETE 쿼리 사용 방법 (0) | 2022.02.06 |