首頁  >  文章  >  資料庫  >  MySQL中char與varchar資料類型選擇原則

MySQL中char與varchar資料類型選擇原則

黄舟
黄舟原創
2017-03-01 13:34:291586瀏覽


很多地方在分析char與varchar資料類型選擇原則上,往往忽略了儲存引擎。事實上,我們應根據選定的儲存引擎,決定如何選擇合適的資料類型。

char與varchar比較

##3 」1'ab''ab '3 #'ab'3'abc'#'abc'3'abc '4'abcdefg'#'abc'3'abc'4
#char(3) 實際儲存字元長度 varchar(3) 實際儲存字元長度
#」 '   '
總結:從上表可以看出,char屬於定長的。

char屬於定長類型,varchar屬於非定長類型,varchar屬於變長。或許有人會問為什麼varchar長度比資料長度大呢?因為VARCHAR保存時用一個位元組或兩個位元組長的前綴+資料。如果VARCHAR列宣告的長度大於255,長度前綴是兩個位元組,否則是一個位元組。

MyISAM儲存引擎

MyISAM資料表,最好使用固定長度的資料列來取代可變長度的資料列。

InnoDB 儲存引擎

建議使用VARCHAR類型。

對於InnoDB資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR欄位簡單。因而,主要的效能因素是資料行使用的儲存總量。由於CHAR平均佔用的空間多於VARCHAR,因此使用VARCHAR來最小化需要處理的資料行的儲存總量和磁碟I/O是比較好的。

MEMORY儲存引擎

MEMORY資料表目前都使用固定長度的資料行存儲,因此無論使用CHAR或VARCHAR列都沒有關係。兩者都是作為CHAR類型處理的。

迷思

1.我們都知道,utf-8的中文佔3個字節,gbk佔兩個字節,那麼varchar(20)是不是只能儲存20個字節,即儲存6個漢字呢?

答:不是這樣的,(網路上說5.0之前版本是這樣的,沒有測試)。 mysql varchar(20)  不管中文還是英文都能存20個,但varchar字段的最大長度跟編碼有關,如果是utf-8,那麼大概65535/3,如果是gbk,那麼大概65535/2

很多地方在分析char與varchar資料類型選擇原則上,往往忽略了儲存引擎。事實上,我們應根據選定的儲存引擎,決定如何選擇合適的資料類型。

 以上就是MySQL中char與varchar資料類型選擇原則的內容,更多相關內容請關注PHP中文網(www.php.cn)!



#

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn