MySQL 기본 캐릭터 셋 설정하기 - RHEL/CentOS/Ubuntu
개요
MySQL 의 default character set 은 MySQL 의 설정 파일에 설정할 수 있다.
배포판 | 위치 |
---|---|
RHEL/CentOS | /etc/my.cnf |
Ubuntu | /etc/mysql/mysql.conf.d/mysqld.cnf |
캐릭터 셋을 명시적으로 설정하지 않으면 MySQL 5.7 이하는 latin1, MySQL 8은 utf8mb4 가 된다. 현재 character set 확인은 다음과 같이 mysql 클라이언트로 연결한 후에 status 명령어로 알수 있다.
또는 다음과 같이 mysql 콘솔에서 show variable 을 사용해도 된다.
mysql> show variables like 'char%';
redmine, gitlab 등 거의 모든 app 들은 character set 으로 UTF-8 을 권장하고 있고 실제로도 UTF-8 을 사용하는게 정신건강에 좋다.
MySQL 5.1 과 5.5 이상은 my.cnf 에 캐릭터 셋 설정하는 방식이 약간 다르다.
MySQL 은 UTF-8 은 3 byte 문자밖에 표시하지 못하므로 아래에서 설명할 utf8mb4 인코딩을 사용하는 것을 권장.!
설정
MySQL 8
MySQL 5.5 이상
MySQL 5.5 부터는 default-character-set 옵션이 제거되었고 character-set-server 만 설정해 주면 된다.
skip-character-set-client-handshake 가 빠지면 client 의 시스템 encoding 을 사용하는데 윈도의 경우 euckr 로 설정 될수 있으므로 필요하다.
[mysqld] collation-server = utf8mb4_unicode_ci character-set-server = utf8mb4 skip-character-set-client-handshake
이제 service mysqld restart 로 재구동후에 mysql client 에서 status 명령어로 보면 charset 이 utf-8mb4 로 변경되었을 것이다.
MySQL 5.1
5.1 은 다음과 같이 설정해야 한다.
[mysqld] character-set-server = utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8
이모지 지원을 위한 UTF8MB4 인코딩
MySQL 8 은 기본 character set 과 collation 이 utf8mb4과 utf8mb4_0900_ai_ci이므로 아래 내용을 별도로 설정할 필요가 없다.
MySQL 은 UTF-8 구현을 대충 해서 3 Byte 밖에 표현을 못하는 문제가 있었는데 Emoji 가 활성화되면서 4 byte 로 표현해야 하는 UTF-8 문자들에 대한 요구가 많아졌다.
그래서 다른 DBMS 와는 달리 MySQL 은 utf8mb4 라는 4byte 를 표현하는 새로운 캐릭터 셋을 만들었으니 Emoji 나 기타 4 byte 로 인코딩하는 UTF-8 문자를 MySQL 에 저장하려면 utf8mb4 인코딩을 사용해야 한다. (MySQL 5.5.3 이상 필요)
utf8mb4 캐릭터 셋은 오직 MySQL 에만 해당되는 문제이고 다른 DBMS 는 아예 utf8mb4 라는 캐릭터 셋이 없으며 보통 인코딩을 UTF-8 로 설정하면 된다.
[mysqld] collation-server = utf8mb4_unicode_ci ## MySQL 8 은 기본 collation 이 변경됨 # collation-server = utf8mb4_0900_ai_ci character-set-server = utf8mb4 skip-character-set-client-handshake
기존 DB Migration
이미 기존에 만들어진 database 라면 alter database 명령어로 캐릭터 셋과 collate 를 변경할 수 있다.
ALTER DATABASE homestead CHARACTER SET = utf8mb4;
MySQL 8 에 새로 도입된 utf8mb4_0900_ai_ci Collation 을 사용하도록 변경할 수 있지만 collation 변경은 Primary key, unique constraint 등 여러 부분에 영향을 미치므로 주의해서 변경해야 한다.
ALTER DATABASE homestead CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;