Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 안녕하세요. 백준 chogahui05입니다. 'A'를 ascii로 표현한다면 1byte로 표현이 됩니다. 그런데, '가'와 같은 것들은 ascii로 표현하지 못합니다. java에서 문자 인코딩 시간에 이야기를 조금 했었습니다. utf-8 인코딩 형식에서는 3byte로 표현이 된다고. utf-16은? 2byte였어요. 실제로, mysql에서 length는 문자열의 byte 크기를 리턴해 주는데요. 예제를 보면서 이해해 보도록 하겠습니다.


 먼저 table 2개를 생성하겠습니다. 각각 utf8_table과 utf16_table입니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

  utf8mb4는 아래 글에서 충분히 설명을 드렸습니다.

[관련글]

utf8mb4는 대체 무엇일까요?

 이모티콘을 넣을 수 있었던 것이 utf8mb4, 그렇지 않았던 것이 utf8이였습니다. 채팅 서버에서 이모티콘을 쓰는 경우가 상당히 많다는 것을 고려를 할 필요가 있어요. 그것 빼고는 utf8 규격과 같다고 보시면 됩니다. 한글 하나는 3byte이고, 영어는 1byte라고 생각하시면 되겠습니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 utf16_table의 character set은 utf16입니다. 2byte로 표현이 될 수 없는 영역은 서러게이트 영역 2 2개로 표현이 되는데요. 한글과 영어는 그렇지 않습니다. 따라서, 2byte로 표현이 됩니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 다음에, 두 테이블에 똑같이 '조가희' 라는 데이터를 넣었습니다. 이제, mysql length 함수를 이해해 보도록 하겠습니다.


 target이 되는 문자열 하나만 넘겨주면, 그 문자열이 차지하는 바이트 수를 리턴하는 함수가 length입니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 stri가 varchar(30)을 담고 있는 필드였습니다. 저는 '조가희' 라는 데이터만 넣었는데요. 실행 결과가 어떻게 나올까요?

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 9가 나옵니다. character set이 UTF8MB4였습니다. UTF8의 속성을 그대로 따라간다고 했어요. 그러면 한글은 3byte로 표현이 될 거에요. 한글 3글자면, 3x3 = 9바이트입니다. 구구단 외우는 거 같군요.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 그러면 utf16_table에서는 어떨까요? 역시 같은 데이터가 저장이 되어 있는데요.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 캐릭터 셋이 utf16으로 다릅니다. 이것은, 한글이던 영어던 2byte로 표현이 됩니다. 한 글자당, 총 3글자가 있었나요? 따라서, 2x3 = 6. 6이 리턴이 됩니다. 결론은 캐릭터 셋에 따라서, 같은 데이터라도 length의 결과 값이 달라질 수 있다는 것이에요. 보통 utf8로 많이 처리하시니, 한글은 1글자당 3byte라고 봐도 무난할 듯 싶긴 하지만.. 이러한 특성은 잘 알아두시는 게 좋겠습니다.


 또 다른 예제를 봅시다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 이번에는 'cho가hui'라는 것을 추가했습니다. 영어 6개, 한글 1개입니다. 그러면 캐릭터 셋이 utf8mb4일 때에는 결과값이 어떻게 나올까요? 이번에는 조금 복잡한 산술 계산이 들어갑니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 한글 1개입니다. 개당 3byte인가요? 그리고 영어 6개인데, 1개당 1byte에요. 그러면 3x1 + 6 = 9입니다.

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

 그런데 utf-16이 캐릭터셋인 경우에는 어떤가요? 영어나 한글이나, 유니코드로 치면 0xFFFF 범위 내에 있나요? 따라서, 한 개당 2byte가 되고, 글자수가 7개니까, 구구단을 외우면 되겠습니다. 2x7 = 14가 됩니다.

SQL로 하는 데이터 관리데이터베이스와 테이블 구축컬럼의 데이터 타입에 관하여

한글 byte

2021년 5월 15일

1,446 조회

답변 1

NS

LV

35

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

NS

LV

35

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.

댓글 0개

0

랑이

2021년 5월 15일

LV

201

Mysql varchar 한글 글자수 - mysql varchar hangeul geuljasu

댓글 1개

1

2021년 5월 15일

항상 확인해보고 해야겠네요 답변 감사합니다!

질문 지켜보기

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.