char
- CHAR는 고정 사이즈이다.
- 남는 공간은 공백으로 채우게 된다.
- CHAR(10) 인데 ‘test’라는 4자짜리 문자열을 insert하게 되면 남는 공간은 6개의 공백으로 채우게 된다. 따라서 무조건 처음 선언된 10byte가 소요된다.
- 물론 값을 받아 올 때 이 공백은 자동으로 제거된다.공백까지 읽고 싶다면 PAD_CHAR_TO_FULL_LENGTH 모드를 활성화하면 공백까지 다 읽어온다.
varchar
- VARCHAR는 이름이 의미하듯 가변길이이다.
- 데이터를 삽입하면 데이터값외에 삽입된 문자열의 길이를 저장하는데, 255글자 이하에는 1바이트, 그 이상은 2바이트의 추가 공간을 필요로 한다. 즉, 실질적인 데이터와 길이 정보도 같이 저장된다.
- VARCHAR(10)에 ‘test’라는 4자짜리 문자열을 삽입하면4byte + 1byte(길이를 저장하기 위한 메모리) = 5byte가 소모된다.
- 저정할 수 있는 길이는 0부터 255까지이며MySQL 5.0.3 이후에는 0부터 65,535까지 지정할 수 있다.
- VARCHAR 값은 저장될 때에 공백이 추가되지 않는다.
- 공백에 대한 처리는 버전에 따라 다르다.
이름, 주소 등의 길이가 변할 수 있는 값은 VARCHAR를 사용하고, 사번, 주민등록번호 같은 길이가 일정한 데이터는 CHAR를 사용하는게 좋다.
참고
https://ninearies.tistory.com/166
https://goodgid.github.io/JS-char-vs-varchar/