[MySQL] 서버와 클라이언트 캐릭터셋을 다르게 설정
기본적으로 클라이언트 서버 캐릭터셋을 같게 가져 가지만 특별한 이유가 있어 달라야 되는 문제가 생길 수 있습니다. 이런 경우 서버에 저장하는 캐릭터셋과 클라이언트가 다르면 DBMS에서 자동으로 변환을 하여 보여주게 됩니다.
MySQL8 서버와 클라이언트 다른 캐릭터셋으로 설정
아래의 예는 저장은 utf8로 저장하고 출력(커넥션)은 euckr로 할 수 있는 방법 입니다.
[client]
default-character-set=euckr
[mysql]
default-character-set=euckr
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES euckr'
위처럼 설정하면 아래와 같은 결과를 얻게 됩니다.
- Client characterset: euckr
- Connection characterset: euckr
- Server characterset: utf8mb4
- Database characterset: utf8mb4 (기본적으로 서버의 캐릭터셋을 따르지만, 데이터베이스 별로 캐릭터셋을 설정할 수 있습니다)
init_connect
설정은 새로운 클라이언트 연결이 성립될 때마다 SET NAMES euckr
명령어를 실행하도록 하는 것입니다.
이 명령어는 클라이언트가 서버에 데이터를 보낼 때 사용하는 캐릭터셋과 서버가 클라이언트에 데이터를 보낼 때 사용하는 캐릭터셋을 모두 euckr로 설정합니다.
systemctl restart mysqld 를 통해 서버를 재시작 하면 된다.
● init_connect 적용되지 않는 경우
MySQL에서 init_connect
설정은 SUPER
권한을 가진 사용자에게는 적용되지 않습니다.
이는 SUPER
권한을 가진 사용자가 데이터베이스에 문제가 생겼을 때 접속할 수 있도록 보장하기 위한 것입니다.
따라서, root
사용자는 SUPER
권한을 가지고 있기 때문에 init_connect
설정이 적용되지 않는 것이 정상입니다.
init_connect
설정을 테스트하려면 SUPER
권한이 없는 다른 MySQL 사용자 계정을 생성해서 테스트해보시는 것이 좋겠습니다.
SUPER
권한이 없는 새로운 사용자 계정을 생성하는 방법은 다음과 같습니다.
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITHOUT GRANT OPTION;
이렇게 사용자를 생성한 후, 해당 사용자로 접속하여 status;
명령을 실행해보시면 init_connect
설정이 적용된 것을 확인하실 수 있습니다.