250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

유니코드 와 utf8 / utf16 차이점과 utf8_bin, utf8_general_ci, utf8_unicode_ci 등에 대해서도 알아보자 본문

[Snow-ball]프로그래밍(컴퓨터)/프로그래밍 및 컴퓨터 개론 이론

유니코드 와 utf8 / utf16 차이점과 utf8_bin, utf8_general_ci, utf8_unicode_ci 등에 대해서도 알아보자

Snow-ball 2022. 7. 20. 10:07
반응형

유니코드란?

유니코드는 국제적으로 전 세계 언어를 모두 표시할 수 있는 표준코드이다. 

유니코드의 목적은 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체하려는 것이다.

기존의 인코딩들은 다국어 환경에서는 서로 호환되지 않아 한정된다는 문제점이 있었다.

 

그래서 유니코드를 사용하게 되었다.

유니코드는 전 세계의 든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 표준 코드이다,

유니코드는 2바이트, 즉 16비트를 사용해 2^16가지(65536)를 표현할 수 있다.

 

UTF(Unicode Transformation Format)의 약자이며, UTF-8, UTF-16은 UTF에 포함된다.

UTF-8은 유니코드를 인코딩하는 방식이다. UTF-8인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트 까지를 사용한다.

 

 


 

 

utf-8, utf-16 표로 차이점 확인하기

 

 

 

 

 

 

 


 

Collation이란?

utf-8이나 utf-16을 보면 utf8_bin, utf8_general_ci, utf8_unicode_ci 등등 다양하게 있는데, 어떤 차이가 있을까?

 

collation이라고 불리는데 이것은 정해진 character set에 의해 저장된 데이터들이 어떤 방식으로 정렬(order by) 될지를 결정하는 옵션이다. 물론 직관적인 자료(예를 들어 int형 or date형)에서는 collation의 차이가 큰 의미가 없다.

1
2
3
4
5
int 형 : 16315239104313111
-> 13611115231339104
 
date 형: 2018년, 3012년, 150년, 333년
-> 150년, 333년, 2018년, 3012년
cs

 

하지만 문자를 정렬하는 것은 상당히 까다롭다. 예를 들자면 'A'와 '가'  혹은 'a' 와 'á'  같은 문자들은 어떻게 정렬해야 하는것인가? 이런 이유로 mysql은 collation 속성을 통해서 텍스트 데이터들의 정렬 방식을 결정하는데 이것은 show collation 명령어를 통해서 밑의 내용을 확인이 가능하다.

 

 

 

 

 

 

 

 

이중에서 bin, general_ci, unicode_ci 를 확인해보자.

 

 

utf8_bin

ASCII 코드표의 16진수 순서로 정렬되는데 A는 0x41, B는 0x42 이기 때문에, A > B 순으로 정렬된다.

 

utf8_unicode_ci

유니코드 표준을 기반으로 정렬한다. 유니코드는 전 세계에 존재하는 모든 문자 인코딩을 통합하려는 목적으로 제작되었기 때문에 사람이 사용할 수 있는 거의 모든 언어들이 표현되어 있으며 이를 기준으로 정렬하는 방식을 말한다.

 

utf8_general_ci

utf8_unicode_ci와 정렬 방법은 동일하지만, 정렬 속도 향상을 위해 일반적으로 잘 사용되지 않는 문자들을 정렬 기준에서 제외한 방법이다. 우리는 'ABCD abcd'등은 자주 사용하지만, 'ÀÁÅåāă'의 사용은 매우 드물다. 그렇기 때문에 사용빈도가 낮은 문자들까지 정렬 기준에 포함하여 모두 'A'로 분류하여 같은 우선순위로 정렬을 수행하도록 하자는 취지로 개발되었다.

 

 

 

반응형
Comments