MySQL/Character Set & Collation 및 Emoji (utf8 vs utf8mb4)
안녕하세요, 건담아빠입니다. 이번 포스팅은 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
문자 집합(Character Set)과 인코딩(Encoding)
널리 알리는 기술 소식 다양한 접근성과 사용성, UI 개발에 대한 소식을 널리 알리고 참여하세요! Spread your knowledge! 구독 아티클 문자 집합(Character Set)과 인코딩(Encoding) Nts Nuli 2012-09-25 17:25:25 안녕
nuli.navercorp.com
MySQL 문자셋의 두가지 설정 방법. Character Set & Collation
MySQL에서 인코딩을 설정할 때 Collation이라는 개념이 나오는데 이 점은 Character set과는 조금 차이를 보인다. Character Set – 특정 문자가 저장될 때 어떻게 Encoding되어 저장될 것인지 규칙이 저장되
jins-dev.tistory.com
blog.naver.com/parkjy76/222260753535
Charset 와 Collation 설정이 MySQL 성능에 미치는 영향
출처 : https://www.percona.com/blog/2019/02/27/charset-and-collation-settings-impact-on-mysql-perfor...
blog.naver.com
Charset과 Collation에 대한 개념
출처: https://blog.lael.be/post/917 기술이 매우 빠르게 발전한다. 배워도 배워도 계속 배워야 한다. 최근에 라엘이가 앞으로 100년동안은 나타나지 않을 것이라고 예상했던, 4 Byte UTF-8 문자열을 보고
sshkim.tistory.com
zetawiki.com/wiki/MySQL_%ED%85%8C%EC%9D%B4%EB%B8%94_collation_%EB%B3%80%EA%B2%BD
MySQL 테이블 collation 변경 - 제타위키
다음 문자열 포함...
zetawiki.com