티스토리 뷰

기본으로 설정된  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

});


반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함