hmk run dev

MYSQL CHARSET(캐릭터 셋) 본문

mysql

MYSQL CHARSET(캐릭터 셋)

hmk run dev 2021. 11. 17. 11:08

 

데이터베이스를 구축하다보면 텍스트 데이터(Text Data)를 취급해야 할 때가 있다.

이때 반드시 고민해야 하는 것이 있는데, 바로 문자셋(character set)을 선택하는 것이다.

 

실생활의 대부분의 데이터는 텍스트기반(text-centric)이다.

당연히 실생활의 모든 텍스트 데이터를 저장할 수 있는 자료형이 필요로 하게 되었다.

 

이것을 위해서 나온 charset이 UTF-8 이다.

UTF-8 문자 집합은 1~4 바이트까지 저장이 가능하게 설계되었다. (알파벳 1byte, 한글 3byte)

 

MySQL/MariaDB 에서도 UTF-8 을 지원한다.

이때! 간과한 사실이 있는데, 전세계 모든 언어가 21bit (3바이트가 조금 안됨)에 저장되기 때문에

MYSQL 에서 utf8 을 3바이트 가변 자료형으로 설계하였다.

 

그렇기 때문에 최근에 나온 4바이트 이상 문자열(Emoji 같은것)을 utf8 에 저장하면 값이 손실되는 현상이 발생한다!

 

- 알파벳의 경우, UTF-8 인코딩 시 1 byte를 차지하므로 1씩 증가한다.

- 하지만 한글의 경우, 3 byte를 차지하므로 3씩증가


UTF - 8

utf-8은 Go언어 창시자인 Rob pike가 만든 인코딩방식이다. utf-8은 기존의 아스키뿐아니라 모든 유니코드를 나타낼 수 있는 웹사이트에서 기본적으로 사용하는 텍스트 인코딩이다. utf-8은 가변길이 유니코드 인코딩 방식이다. 아스키코드는 7bits( 8bits = 1byte )를 사용하므로 1byte를 사용하여 그대로 나타낸다.

- 유니코드는 국제표준 문자표이고 UTF-8은 인코딩(어떤 정보를 미리 약속한 규칙으로 가공) 방식이다. 


 

4바이트 UTF-8 문자열

MySQL에서 원래의 설계대로 가변-4바이트 UTF-8 문자열을 저장할 수 있는 자료형을 추가했다.

2010년 3월 24일에 utf8mb4 라는 charset을 추가하였다. (MYSQL 5.5.3 에 추가됨)

 

>  utf8 과 비슷하지만 확장된 문자를 지원하기 위해서 4바이트까지 저장할 수 있습니다.

 


Emoji 문자열

그리고 중요한 것! Emoji 문자열이 모두 4 Byte 이다!!

요즘 스마트폰에서 이미 있는 문자이고, 운영체제가 Mac OS X인 경우 

Mac 에서 커멘드+컨트롤+스페이스를 입력하면 나오는 키보드이다.

 


캐릭터셋(CHARSET)을 별도로 설정하지 않아도 되는 이유  

MySQL 의 Default Character Set는 버전별 차이가 나며 5.5 버전(현재 워커맨 mysql 버전 - 5.7.33)기준으로 latin1 에서 utf8mb4 로 변경 되었습니다.

 

Latin1 인코딩을 사용하여 중국어, 일본어, 히브리어, 러시아어 등과 같은 비라틴 문자를 저장하려는 경우 mojibake( 왜곡된 문자 )로 끝납니다 .

 

 

 

 

Comments