• Home
  • About
    • lahuman photo

      lahuman

      열심히 사는 아저씨

    • Learn More
    • Facebook
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

mysql에서 emoji를 저장하기 위한 케릭터셋 설정

19 Nov 2022

Reading time ~1 minute

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 인덱스 적용

참고자료

  • utf8
  • mysql - 10.9 Unicode Support
  • How to support full Unicode in MySQL databases
  • [AWS] RDS MySQL 언어 변경 (utf8 / utf8mb4, character-set
  • [MariaDB] Setting utf8mb4 Character Set
  • mysql - create index


mysqlutf8mb4 Share Tweet +1