mysql에서 emoji를 저장하기 위한 케릭터셋 설정
utf8 to utf8mb4
utf8 인코딩은 한 문자를 나타내기 위해서 1바이트에서 4바이트까지를 사용합니다.
그런데 말입니다. mysql의 utf8은 3바이트로 이루어져 있습니다.
emoji를 제대로 표현하기 위해서는 4바이트의 문자열이 필요합니다.
아래는 utf8 에서 utf8mb4로 변환 하는 내용을 정리 하였습니다.
MYSQL에서 설정 변경
mysql 5.5.3 이상에서만 utf8mb4를 사용할 수 있습니다. 참고
설정 변경
# linux - my.cnf
# windows - my.ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
AWS RDS MYSQL에서 설정 변경
RDS > parameter groups > 변경 RDS 선택
utf8mb4
로 변경 변수값 변경
- character_set_client
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- character_set_system
utf8mb4_general_ci
로 변수 값 변경
- collation_connection
- collation_server
변경 내역 확인
다음 명령어를 이용해서 DBMS의 상태를 확인를 확인합니다.
show variables like 'c%';
추가 팁 - mysql create index with substring
mysql에 index 생성시, substring, cast 와 같은 함수를 활용하여 생성 할 수 있습니다.
CREATE TABLE tbl (
col1 LONGTEXT,
INDEX idx1 ((SUBSTRING(col1, 1, 10))) // 인덱스
);
SELECT * FROM tbl WHERE SUBSTRING(col1, 1, 9) = '123456789'; // idx1 적용 안됨
SELECT * FROM tbl WHERE SUBSTRING(col1, 1, 10) = '1234567890'; // idx1 인덱스 적용