在mysql數據庫中,char和varchar都是常用的字符型數據類型。但是不論是結構還是數據的保存上看送悔,兩者還是有很大的差別。在不同的場景中也各有優(yōu)劣晦闰。我們一起看一下char和varchar:
相同點:
- char(n),varchar(n)中的n都代表字符的個數放祟。
- 超過char,varchar最大長度n的限制后呻右,字符串會被截斷跪妥。
不同點:
- char不論實際存儲的字符數都會占用n個字符的空間,而varchar只會占用實際字符應該占用的字節(jié)空間加1(實際長度length声滥,0<=length<255)或加2(length>255)眉撵。因為varchar保存數據時除了要保存字符串之外還會加一個字節(jié)來記錄長度(如果列聲明長度大于255則使用兩個字節(jié)來保存長度)。
- 能存儲的最大空間限制不一樣:char的存儲上限為255(2^8-1)字節(jié)落塑,varchar的存儲上限是65535(2^16-1)字節(jié)纽疟。
- char在存儲時會截斷尾部的空格,而varchar不會憾赁。
根據char和varchar結構和數據保存上的不同點污朽,我們比較一下兩者的適用場景:
- 根據要存儲的字符串長度來看: 長度相近且不需要很大存儲空間的字符串可以選用char,節(jié)省存儲空間龙考。
- 從碎片的角度來看:用變長的字符串數據類型蟆肆,需要時不時對碎片進行處理矾睦。
- 即使使用varchar的數據類型也不要盲目設置過大的存儲限制,比如你只需要存儲80個字符炎功,VARCHAR(100)和VARCHAR(500)雖然都存儲了同樣長度的字符枚冗,但是內存消耗是不一樣的。