본문 바로가기

IT

mysql collation utf8_general_ci, utf8_unicode_ci 차이점

반응형

character-set을 utf8로 사용하는 경우 collation 에 대하여 utf8_general_ci 와 utf8_unicode_ci 둘중에 하나를 사용할 수 있습니다. 이 둘의 차이는 비교적 간단하고, 자신의 서비스 원칙에 따라서 둘중에 하나를 사용하는 것이 좋습니다.


일단 utf8_general_ci 명칭에서 느껴지듯이 성능을 우선시하며, 일반적인 경우에 사용하는 collation 이다. 이를 사용하면 ÀÁÅåāă 등의 문자가 없어 A 로 치환되어 비교 처리됩니다. 하여 정확한 비교, 정렬 등이 필요한 경우라면 utf8_general_ci를 사용하지 않도록 합니다. 물론 비교, 정렬에서 utf8_unicode_ci에 비해서 빠른 속도를 보여줍니다. (링크 : collation 차이의 벤치마킹 정보)


개인 PC에서 테스트한 결과 utf8_general_ci 의 경우 0.859초, utf8_unicode_ci 의 경우 2.286초로 성능상 약 266% 만큼 utf8_general_ci 가 빠릅니다.


utf8_unicode_ci 의 경우는 위의 경우에 대한 예외가 없이 모두 정상적으로 비교, 정렬된다라는 장점이 있으나, 위의 벤치마킹 정보에서 확인할 수 있드시 성능부분에서는 손해를 많이 보게 됩니다.


뭐.. 빡세게 돌아가는 서버가 아니라면 utf8_unicode_ci 를 사용하는 편이 나을 것이고, 구지 저런 특이한 악센트 문자를 사용하는 나라의 언어는 포기한다면, utf8_general_ci를 사용하는 것도 괜찮을 것이라 봅니다.


하지만 항상, 무엇때문에 정상적으로 작동하지 않는지 알 수 없는 경우를 대비하기 위해서 기본적으로는 utf8_unicode_ci를 사용할 것을 권합니다. (성능에 문제가 된다면 그건 추후 변경해야 할 사항이라고 생각하지만, 벤치마크상의 수치만 보면 고민이 되긴 합니다.)


참고 링크 : http://medusa.kr/bbs/view.php?cbi=6&bbs_idx=340&PHPSESSID=f14e7b392b0b5ad65dc8132e4bf26001


http://haloes.tistory.com/219


끝.

반응형