AWS RDS(Mysql)에서 emoji 관련 설정하기
기본으로 설정된 utf8 charset에서는 4바이트로 표현 가능한 Emoji를 저장할 수 없다.
그래서 데이터베이스의 Charset을 utf8mb4로 변경해야 하는데,
1. 로컬에 설치된 Mysql인 경우 ( Ubuntu 기준 )
1-1. '/etc/mysql/my.cnf' 파일에 다음 내용을 추가한다.
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
1-2. '$ sudo service mysql restart'명령어로 mysql 서비스 재시작
1-3. > SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%' 쿼리로 정상적으로 변경되었는지 확인.
2. AWS RDS인 경우 ( Ubuntu 기준 )
먼저 AWS 콘솔 접속 -> RDS 서비스로 이동
2-1. RDS 인스턴스의 파라미터 그룹 추가 ( 기본 파라미터 그룹이 있지만 편집이 불가능 하므로 새로 만들어서 편집하도록 한다. )
2-2. 다음 내용 파라미터 값을 수정
character_set_client : utf8mb4
character_set_connection : utf8mb4
character_set_database : utf8mb4
character_set_results : utf8mb4
character_set_server : utf8mb4
collation_connection : utf8mb4_unicode_ci
collation_server : utf8mb4_unicode_ci
2-3. 저장 하게 되면 비동기로 천천히 변경되는 경우가 있지만 재시작 하는것을 추천한다. ( 비동기 처리가 끝난 뒤에도 변경되지 않는 경우가 있었다. )
2-4. 터미널이나 phpmyAdmin으로
> SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%' 쿼리를 실행해서 정상적으로 변경되었는지 확인.
----------------------------------------------------
** node 서버 프레임워크를 사용한다면 DB에서 쿼리로 값 받아올 때도 utf8mb4 charSet으로 받아와야 하기 때문에 db연결시에 다음 옵션이 꼭 들어가야한다.
[ Node 서버 코드 ]
var mysql = require('mysql');
const pool = mysql.createPool({
host : 'testHost',
user : root,
password : 'testPassword',
port : 3306,
database : 'testDatabase',
charset : 'utf8mb4'
connectionLimit : 10
});