DB/mysql

[mysql]character set과 collation

  • -

이번 포스트에서는 데이터 저장 시 사용되는 character set과 collation에 대해 살펴보자.

 

character set vs collation

 

기본 설정

mysql에서는 database 생성 시 character set과 collate를 설정할 수 있다. 생략시에는 mysql 서버의 기본 설정을 따른다.

create database sample
character set utf8 collate utf8mb4_0900_ai_ci;

여기서 character set과 collate의 의미에 대해 살펴보자.

character set

character set은 데이터베이스에 저장할 수 있는 문자들의 집합을 의미한다. 이 문자 집합은 데이터베이스가 어떤 문자들을 인식하고 저장할 수 있는지를 결정하다. 예를들어 지금은 거의 쓰지 않는 EUC-KR 같은 경우 완성형이어서 2,350개의 미리 만들어진 글자만 인식한다. 따라서 '똠', '샾' 같은 글자는 인식할 수 없다. 최근에는 UTF-8, UTF-16, UTF-32가 주로 사용된다.

utf8mb3는 최대 3바이트를 사용해서 문자를 저장하며 일반적인 문자들이 포함된다. utf8mb4는 최대 4바이트를 이용하며 일반적인 문자뿐 아니라 이모티콘, 일부 고대 문자들까지 지원한다.

UTF-8ASCII로 작성한 문서나 데이터와의 호환성을 염두에 두고 설계한 인코딩이다. UTF-8은 1~4바이트의 가변길이 인코딩을 사용하며 호환성은 좋지만 상대적으로 인코딩/디코딩 속도가 느릴 수 있다. 반면 UTF-32의 경우는 4바이트의 고정길이이며 호환성을 고려하지 않기 때문에 상대적으로 인코딩/디코딩 속도가 빠를 수 있다

일반적으로는 UTF-8이 주로 사용되며 UTF-32는 내부처리에 사용된다.

collation

collation은 해당 문자셋을 어떻게 정렬할지를 결정하는 알고리즘을 의미한다. 따라서 order by, like, primary key, unique, 비교 연산자 등 여러 연산에 영향을 줄 수 있다.

collation

mysql에서 utf8mb4의 기본 collation은 utf8mb4_0900_ai_ci인데 상세한 의미는 다음과 같다.

  • utf8mb4: character set mapping 정보
  • 0900: version 정보로 version-9.0.0 UCA 표준에 따름
  • ai: accent insensitive로 악센트를 구분함
  • ci: case insensitive로 대소문자를 구분하지 않음

주요 suffix는 다음과 같다.

suffix 의미
_ai, _as Accent insensitive, Accent sensitive
_ci, _cs Case insensitive, Case Sensitive
_ks kana sensitive (kana는 일본어 표현에 사용된다)
_bin binary

 

참조

https://dev.mysql.com/doc/refman/8.4/en/charset-mysql.html

 

MySQL :: MySQL 8.4 Reference Manual :: 12.2 Character Sets and Collations in MySQL

12.2 Character Sets and Collations in MySQL MySQL Server supports multiple character sets, including several Unicode character sets. To display the available character sets, use the INFORMATION_SCHEMA CHARACTER_SETS table or the SHOW CHARACTER SET stateme

dev.mysql.com

https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-sets.html

 

MySQL :: MySQL 8.4 Reference Manual :: 12.10.1 Unicode Character Sets

12.10.1 Unicode Character Sets This section describes the collations available for Unicode character sets and their differentiating properties. For general information about Unicode, see Section 12.9, “Unicode Support”. MySQL supports multiple Unicod

dev.mysql.com

 

 

'DB > mysql' 카테고리의 다른 글

[sakila] join & subquery 연습  (1) 2024.04.09
[sakila] 단일행 함수 활용 연습  (0) 2024.03.13
[sakila] 기본 쿼리 연습  (0) 2024.03.13
[mysql]알아두면 유용한 설정  (0) 2023.02.05
[mysql]00월 00일 입력?  (0) 2023.02.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.