-
MySQL/Character Set & Collation 및 Emoji (utf8 vs utf8mb4)DBMS/MySql (MariaDB) 2021. 4. 21. 16:38
안녕하세요, 건담아빠입니다. 이번 포스팅은 Emoji 및 character set 이해입니다.
MySQL에서 인코딩을 설정할 때 Collation 이라는 개념이 나오는데 Character Set과는 차이가 있습니다.
Character Set (문자 집합)
특정 문자가 저장될 때 어떻게 Encoding되어 저장될 것인지 규칙이 저장되어 있는 집합
latin1 (2 Byte), utf8 (가변 3Byte), utf8mb4 (가변 4Byte) 등 저장공간의 크기
utf8 (utf8mb3)
1~4바이트까지 저장이 가능하게 설계
가변 3바이트를 사용
공간 절약 + 속도향상을 위해서 가변 3Byte로 설계
utf8mb4
내부적으로 한문자를 표현하는데 4Byte를 사용
Emoji 같은 새로나온 문자들은 4Byte가 필요
Collation (정렬)
특정 문자셋에 의해 DB에 저장된 값들을 검색하거나 정렬 등 작업을 위해 문자들 간에 '비교'시에 사용하는 규칙들의 집합
주로 데이터 정렬(ORDER BY)에 사용하고, text 계열 (VARCHAR, CHAR, TEXT등) 자료형에서만 사용할 수 있다.
(a와 b중 어느것이 큰가?, a와 A중 어느것이 큰가?)
utf8_bin or utf8mb4_bin
바이너리 저장 값을 그대로 정렬한다.
hex 코드 (16진수)로 A는 41, B는 42, a는 61, b는 62이기 때문에 A>B>a>b 순서로 정렬된다.
utf8_general_ci or utf8mb4_general_ci
라틴계열 문자를 사람의 인식에 맞게 정렬한다. (바이너리를 가공한 값)
a다음에 b가 나와야 한다는 생각으로 나온 정렬방식으로 A>a>B>b 순서로 정렬된다.
utf8_unicode_ci or utf8mb4_unicode_ci
한국어, 영어, 중국어, 일본어를 같이 사용하는 환경에서는 general_ci 와 unicode_ci의 결과가 동일하다.
Emoji
Emoji 문자열은 모두 4Byte 이다.
MySQL, MariaDB에서 Emoji를 사용하려면 4Byte를 지원하는 utf8mb4로 설정하여야 한다.
SQL
테이블 생성
CREATE TABLE 테이블( ) CHARSET=utf8 COLLATE=utf8_general_ci; CREATE TABLE 테이블( ) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
테이블 변경
ALTER TABLE `테이블명` DEFAULT CHARACTER SET 캐릭터셋 COLLATE 콜레이션 ALTER TABLE `테이블명` DEFAULT CHARACTER SET utf8; ALTER TABLE `테이블명` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `테이블명` DEFAULT CHARACTER SET utf8mb4; ALTER TABLE `테이블명` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
컬럼 변경
ALTER TABLE `테이블명` MODIFY `필드명` LONGTEXT NULL COLLATE 'utf8mb4_bin'
참고)
nuli.navercorp.com/community/article/1079940?email=true
blog.naver.com/parkjy76/222260753535
zetawiki.com/wiki/MySQL_%ED%85%8C%EC%9D%B4%EB%B8%94_collation_%EB%B3%80%EA%B2%BD
'DBMS > MySql (MariaDB)' 카테고리의 다른 글
MariaDB에서 조회 결과 업데이트 하기 (0) 2023.03.09 MySQL/예약기간 중복 찾기 (0) 2022.11.07 MySQL/날짜 Recursive list (두 날짜 사이의 날짜 목록) (0) 2022.11.07 MySQL/정규식 검색 (0) 2022.09.19 MySQL/한글, 영문, 숫자, 특문 정렬방식 (2) 2021.03.17