반응형

#mysql varchar로 선언하면 한글은 몇 글자까지 넣을 수 있을까?

 

개발쪽에서 한글입력관련 이슈를 문의해서

Varchar(50) 으로 선언한 컬럼에 데이터를 넣었을 때 몇 글자에서 too long error가 나서 안 들어갈까 확인해보았다.

 

1.구글링으로 찾아본 정의들

 

[ euc-kr ]  
ascii 코드 + 한글  
영문/숫자/기호는 1바이트. 한글과 한자는 2바이트  
euc-kr 또는 ksc5601  
웹페이지 작성에 사용가능  
특수한 외국어 문자나 일본식/중국식 한자는 표현불가  
   
[ unicode ]  
모든 글자를 2바이트로 표현  
전세계 모든 글자들을 한꺼번에 표현가능  
웹페이지 작성에 사용불가  
   
[ utf-8 ]  
영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현  
전세계 모든 글자들을 한꺼번에 표현가능  
웹페이지 작성에 사용가능

 
•table을 정의할때 varchar(60)처럼 (n)으로 열 타입의 크기를 정하는데, mysql 4.1 이전에는 n이 바이트였다면, 4.1 이후부터는 문자 수다. 
•즉 varcher(60)이면 아스키 문자든 한글이든 60자만큼 입력가능하다는 의미이다. 
charater_length(char_length)는 문자수를 계산하는 연산이지만, octet_length는 바이트 수를 계산하는 연산 이므로 인코딩방식을 주의하여 사용해야합니다.

 

2.결론

 

mysql은 varchar로 선언하면 정말 한글자씩 인식해서 들어간다.

다만 이종 DB로 마이그레이션시 이슈가 될 수 있을 거 같다.

 

실제로 내가 쓴 글자수 = varchar(50) 안에 들어가는지 아닌지는 아래 함수로 확인해보면 된다.

 

length function으로는 mysql에서 정확하게 확인이 안되고,

char_length 함수로 확인하면 된다.

 

ex)
select CHAR_LENGTH('현재 사용중인 요금제와 선택한 요금제가 같음, 선택한 요금제와 현재 요금제의 종류가 다름') from dual;
/* varchar(50)으로 선언한 컬럼이라면 값이 50넘으면  too long error 난다. */

select CHAR_LENGTH('현재 사용중인 요금제와 선택한 요금제가 같음, 선택한 요금제와 현재 요금제의 종류가 다름 하') from dual; 
/*  에러남 ^^ */

 

반응형

'RDB > mysql' 카테고리의 다른 글

[장애] innodb Dead Lock 문제  (0) 2020.03.03
mysql TEXT like 검색 개선 포인트 찾기 1  (0) 2020.02.07
mysql shell script 2  (0) 2019.09.09
Mysql shell script 1  (0) 2019.09.09
Xtrabackup 2.49 설치  (0) 2019.09.06
블로그 이미지

dung beetle

취미는 데이터 수집 / 직업은 MYSQL과 함께 일하는 DBA / 즐거운 엔지니어의 끝나지 않는 이야기

,