參考來源:https://blog.csdn.net/brycegao321/article/details/78038272
在存儲字符串時, 可以使用char、varchar或者text類型, 那么具體使用場景呢?
參考下面這個表結構:
1、 char長度固定, 即每條數據占用等長字節空間;適合用在身份證號碼、手機號碼等定。
2、 varchar可變長度,可以設置最大長度;適合用在長度可變的屬性。
3、 text不設置長度, 當不知道屬性的最大長度時,適合用text。
按照查詢速度: char最快, varchar次之,text最慢。
char:char(n)中的n表示字符數,最大長度是255個字符; 如果是utf8編碼方式, 那么char類型占255 * 3個字節。(utf8下一個字符占用1至3個字節)
varchar:varchar(n)中的n表示字符數,最大空間是65535個字節, 存放字符數量跟字符集有關系;
MySQL5.0.3以前版本varchar(n)中的n表示字節數;
MySQL5.0.3以后版本varchar(n)中的n表示字符數;
PS:varchar實際范圍是65532或65533, 因為內容頭部會占用1或2個字節保存該字符串的長度;如果字段default null(即默認值為空),整條記錄還需要1個字節保存默認值null。
如果是utf8編碼, 那么varchar最多存65532/3 = 21844個字符。
text:
跟varchar基本相同, 理論上最多保存65535個字符, 實際上text占用內存空間最大也是65535個字節; 考慮到字符編碼方式, 一個字符占用多個字節, text並不能存放那么多字符; 跟varchar的區別是text需要2個字節空間記錄字段的總字節數。
PS: 由於varchar查詢速度更快, 能用varchar的時候就不用text。