둘다 가변길이로, Hello 저장하면 5바이트를 사용한다. (인코딩에 따라 다르긴 하다)
TINYINT 등등 모두 가변길이라 문자열 저장하는데 저장공간을 염려할 필욘 없을것 같다.
대략 b-tree 인덱스를 걸수 있냐 없냐 정도의 차이일듯 하다.
text
2+c
바이트 디스크공간을 차지한다. (c=character length를 말함. 길이를 저장하기 위해 varchar보다 1바이트 정도 더 쓸수 있다.)varchar(M)
출처 :
그러나 성능면에서 차이가 나는경우가 발생할수 있다.
temporary table 만들때 TEXT는 disk에서, varchar는 memory에서 처리한다고 한다.
출처 : Performance difference between Text and Varchar in Mysql
temporary table는, group by 를 쓸때 사용된다고 한다.
(이외에도 from 조인이라던지. 내부적으로 테이블을 만들어내고 쿼리하는 동작들이 있었는데 가물가물..)
또한 mysql 과 postgresql 은 좀 다를수 있다.
varchar도 이론적으로는 64KB까지 저장할 수 있지만
다른 컬럼들과 모두 합쳐서 64KB가 한계이므로, 실제로는 64KB까지 저장할 수 없습니다. (테이블 구조에 따라 한계가 달라집니다.)
또한 varchar 컬럼은 다른 컬럼들과 동일한 공간에 저장되고, text 컬럼은 별도의 공간에 저장되므로
너무 큰 varchar 컬럼이 중간에 끼어있으면 레코드가 무거워져서 검색 성능에 영향을 미칠 수 있습니다.
255자 이상 되는 값은 가능하면 text 컬럼을 사용하세요.
단, 위의 얘기는 mysql에만 해당됩니다. postgresql의 경우 varchar와 text는 아무 차이도 없습니다.
출처 : https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=201487
mysql의 경우 저장 방식에 따른 차이가 있을것 같다.
레코드 내 다른 컬럼들과 함께 저장되는 mysql은 확실히 고민이 필요해 보인다.
그러나 postgresql 은 구분된 동작이 아닌듯 하다.
이외에는 거의 비슷한것 같다.
그럼에도 1차적으로 varchar 를 택하는게 안전해 보인다.