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는 포함하지 않기 때문입니다.
출처