mysql charset utf8 vs utf8mb4

트위터 데이터를 수집해 mysql db에 저장하는 중인데 종종 트윗 내용이 없는 현상이 있어 찾아보니

맨 앞에 4바이트 이모티컨을 사용해서 일어나는 일이었다. (이런 문자들 🍵🍶🍷🍸 )

4 byte character가 들어가면 그 이후의 내용이 잘리고 안 들어가고 있었던 것.

mysql 5.5 이상에서는 utf8 대신 utf8mb4 인코딩을 이용하면 된다고 해서 백업 후 설정 변경.

(collation은 utf8_general_ci 에서 utf8mb4_general_ci 로)

다행히 잘 작동하는 것 같다.

 

==

스택오버플로우에서 참고: http://stackoverflow.com/questions/30074492/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql

설명에 따르면 기존 utf8에 비해 저장 용량도 차이가 안 나고 4 byte character를 지원해주는 것이라고 하니 써서 손해볼 것은 없을 것 같다.

앞으로 utf8mb4로 써야지..

 

==

MySQL 매뉴얼 참고: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

원래 utf8은 1-4바이트 문자로 설계됐는데 일반적인 문자는 3바이트에 들어가니까 편의상(아마 저장용량) 디폴트로 3바이트 문자까지만 지원되고 있었던 것. Supplementary character를 저장하려면 utf8mb4 charset을 이용하라고 되어있다.

CC BY-NC-SA 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Leave a Comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.