#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 |