개발자

SQL varchar(n)과 한글 글자 수 질문

2022년 12월 23일조회 461

테이블의 한 컬럼을 varchar(50)으로 설정 했습니다. 50자까지 들어갈 수 있는걸로 알고 있었는데 검색해보니 mysql 버전에 따라 저 숫자 50이 글자 수 일수 있고 byte일수도 있다는 것을 알았습니다. 일단 저는 글자 수로 들어갑니다. 한글 50자 까지 잘 들어가고 있습니다. 그래서 확인해보기 위해 length를 통해 들어간 데이터의 길이를 조회했는데요 대부분의 데이터가 50을 넘고 있었습니다. 한글은 * 3을 한 수치고 영어는 한글자에 1의 길이를 차지하는 것 같습니다. 왜 이런 일이 발생하는 걸까요? 조회한 쿼리문 select length(title) as length, title From Contents where title is not null; 결과 예시 row length | title 120 | 가나다라마바사아자차카타파하가가가가가가가가가가가가가가가가가가가가가가가가가가 6 | 인형 5 | hello 17 | test 중입니다

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

엄홍재님의 프로필 사진

LENGTH 함수는 문자의 개수를 가져오는 것이 아니라 해당 문자의 byte수를 가져오기 때문에 문자 개수를 알 수 없습니다. LENGTH로 조회했을 때, 한글은 3byte를 차지하고 있어서 위의 결과처럼 나오게 되는 것 같아요 정확한 문자의 개수를 가져오려면 CHAR_LENGTH를 사용하시면 됩니다. varchar(50)에서 50이 의미하는건 CHAR_LENGTH로 조회했을 때의 최대값을 의미하겠네요. 아래 쿼리로 조회해보세요 SELECT CHAR_LENGTH(title) AS length, title FROM Contents WHERE title IS NOT NULL;

김대현님의 프로필 사진

이미 홍재님이 좋은 답변 주셨네요. 유니코드 문자를 utf8 인코딩으로 담으면, 한글은 3바이트를 차지하기 때문에 그렇습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!