[MySQL] text vs varchar

ssunn·2024년 3월 31일
0

사이드 프로젝트

목록 보기
8/8
post-thumbnail

요즘 몰라서 한 실수가 자주 나온다..ㅋㅋㅋㅋ
그치만 또 이렇게 트러블 슈팅을 남기는 이유가 이런 실수를 줄이기 위함이니 어느 정도 취지에 맞게 돌아가고 있는 것 같긴 하다
이걸 좋아해야하나😂
여하튼 또 이번에 터진 문제는,,

mysql에 저장할 때 문자열 타입을 text로 주는 것과 varchar로 주는 것의 차이 때문이었다.

문제상황

스탬프를 저장할 때 인증 메시지와 이미지를 남길 수 있있고, 메시지는 필수로 남겨야한다.
그리고 각 날짜별 스탬프를 다이얼로그 뷰로 보여주기 때문에 보여줄 수 있는 텍스트가 한정적이라 글자수를 30자로 제한하기로 했다.
그래서 또 원래 이런 메모 같은 긴 문자열은 text로 지정했으니까 텍스트로 지정하고 글자수 30으로 제한하면 되겠지~ 하고 어노테이션 설정을 줬다. (웃긴 건 오류가 하나도 안 났다.. 그래서 문제 인식을 전혀 못함..)

근데 이번에 블루밍 프로젝트 운영 서버 구축을 하면서 DB 형상 관리를 위해 Flyway를 도입했고, flyway는 스키마 쿼리문을 직접 다 짜줘야하기 때문에 쿼리문을 쭉 읽다가 메시지에 글자수 제한이 안 걸린 걸 확인했다.
그래서 이렇게 리뷰를 남겼고..

🐢: 저희 스탬프 메시지 글자수 제한하기로 했는데 제한이 안 걸렸어요! varchar(30)으로 설정해줘야할 것 같습니다!
👩‍💻: 자료 찾아봤는데 text 형식은 글자수 제한이 안된대요! 글자수 제한하려면 text 설정 삭제하고 varchar(30)으로 쿼리문에서 설정 추가해줘야 할 것 같습니다!

이런 답변을 받았다.
와 정말 생각도 못했다.
그냥 긴 문자열이니까 text 주고 글자수 제한 같이 줘도 아무 문제 없었으니까! 괜찮겠지! 했는데!!!
JPA 설정을 그렇게 주었다고 해서 MySQL에서 문제가 안 생기는게 아니었고요...
MySQL에서 이미 예약어가 걸려 있어서 도메인 필드명에서 문제가 생긴 적도 있었는데 (사실 이건 좀 예상했음. 이런 적이 한두번이 아니었기 때문에..)
문자열 타입도 이렇게 차이가 있을 줄은 몰랐다.
앞으로는 사소한 설정도 뭐가 다른지 좀 찾아보고 설정해주자,,

결론

MySQL에서 문자열 형식의 차이
Text: 긴 문자열, 길이 제한 못함 (무조건 65535)
varchar: 긴 문자열, 길이 제한 가능 (1~65535)

profile
BackEnd Developer

0개의 댓글

관련 채용 정보