강의를 따라서 실습을 하다보면 같은 문자열을 저장하는데 CHAR를 쓸 때가 있고, VARCHAR를 쓸 때가 있었다. 이 둘의 차이점에 대해서 궁금해져서 조사하였다. MySQL 이론 정리에도 정리해두었다.
MySQL 8.0버전에서는 CHAR 라고 하더라도 후행 공백을 지우고 데이터를 가져온다. 이를 해결하려면 sql_mode에 "PAD_CHAR_TO_FULL_LENGTH" 설정을 주면 된다.
sql_mode 설정 전
select char_length(char_column), char_length(varchar_column) from testtbl;
select length(char_column), length(varchar_column) from testtbl;
sql_mode 설정 전 쿼리 결과
sql_mode 설정
select char_length(char_column), char_length(varchar_column) from testtbl;
select length(char_column), length(varchar_column) from testtbl;
sql_mode 설정 후 쿼리 결과
이와 같이 "sql_mode"를 설정해주면 CHAR Type인 경우 공백을 차지하는 것을 볼 수 있다.
또한, 여기서 length(varchar())
값이 4가 나오는 이유는 length()
함수는 String의 byte 길이만 반환 하므로 헤더의 "data_len"의 1byte는 포함하지 않기 때문이다.
출처