1. 程式人生 > >mysql資料型別~~~char 與varchar

mysql資料型別~~~char 與varchar

  CHAR和VARCHAR型別類似,都用來儲存字串,但它們“儲存”和“檢索”的方式不同。CHAR屬於“固定長度”的字串,而VARCHAR屬於“可變長度”的字元型別。

 

  下表顯示了將各種字串值儲存到CHAR(4)和VARCHAR(4)列後的結果,說明了CHAR和VARCHAR之間的差別。

CHAR和VARCHAR的對比

CHAR(4) 儲存需求 VARCHAR(4) 儲存需求
'' '    '
4個位元組 '' 1個位元組
'ab' 'ab  ' 4個位元組 'ab' 3個位元組
'abcd' 'abcd' 4個位元組 'abcd' 5個位元組
'abcdefgh' 'abcd' 4個位元組 'abcd'  5個位元組

  注意上表中最後一行的值只適用mysql執行在非“嚴格模式”時,如果mysql執行在嚴格模式,超過列長度的值將不會儲存,並且會出現錯誤提示。

 

  從CHAR(4)和VARCHAR(4)列檢索的值並不總是相同,因為檢索時從CHAR列刪除了尾部的空格。下面通過一個例子來說明該差別:

  

  由於CHAR是固定長度的,所以它的處理速度比VARCHAR快得多,但是其缺點是浪費儲存空間,程式需要對行尾空格進行處理,所以對於那些長度變化不大並且對查詢速度有較高要求的資料可以考慮使用CHAR型別來儲存。

  另外,隨著mysql版本的不斷升級,VARCHAR資料型別的效能也在不斷改進並提高,所以在許多的應用中,VARCAHR型別被更多地使用。

  在mysql中,不同的儲存引擎對CHAR和VARCHAR的使用原則有所不同,這裡簡單概括如下。

  • MyISAM儲存引擎:建議使用固定長度的資料列代替可變長度的資料列。
  • MEMORY儲存引擎:目前都使用固定長度的資料行儲存,因此無論使用CHAR或VARCHAR列都沒有關係。兩者都是作為CHAR型別處理。
  • InnoDB儲存引擎:建議使用VARCHAR型別。對於InnoDB資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR列效能要好。因而,主要的效能因素是資料行使用的儲存總量。由於CHAR平均佔用的空間多於VARCHAR,因此使用VARCHAR來最小化需要處理的資料行的儲存總量和磁碟I/O是比較好的。

 

原文地址:https://www.cnblogs.com/hustzzl/p/7182954.html