標籤:
char(m) 定長字串類型 非 Unicode 字元
varchar(m) 變長字串類型 非 Unicode 資料
說明:M為最大可儲存位元組數 漢子佔兩個位元組,通過指定m,來限制儲存的最大字元數長度,char(20)和varchar(20)將最多隻能儲存20個字元,超過的字元將會被截掉。m必須小於該類型允許的最大字元數。
一 char(m)類型
Char(m) 最大位元組數255 定長類型 m可取0-255 它的右邊填充空格以達到指定長度,當檢索到char值時,尾部的空格被刪除掉 (性別 密碼)
CHAR 類型用於定長字串,並且必須在圓括弧內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。
注意:比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。所以char類型儲存的字串末尾不能有空格,varchar不受此限制。
二 varchar(m)類型
Varchar(m) 最大位元組65535 可變長度 m取0-65535 只儲存需要字元數,另加一個位元組來聲明長度 (使用者名稱 文章標題)
VARCHAR 類型只使用儲存字串實際需要的長度(增加一個額外位元組來儲存字串本身的長度)來儲存值。比指定長度大的值將被截短。
三 區別:
@1.內部儲存機制:
char是固定長度,char(4)不管是存一個字元,2個字元或者4個字元(英文的),都將佔用4個位元組,不夠的用空格補齊
varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),所以varchar(4),存入一個字元將佔用2個位元組,2個字元佔用3個位元組,4個字元佔用5個位元組。
@2.char類型的字串檢索速度要比varchar類型的快
@3.類型的選擇
文字欄位若長度固定,如:身分證號碼,就不要用 varchar 或 nvarchar,應該用 char 或 nchar。
文字欄位若長度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節省儲存空間外,存取硬碟時也會較有效率。
@4效能選擇
(1) varchar類型在更新環節上的系統開銷是遠大於char類型的,所以char適合欄位頻繁更新時的應用。
(2) varchar更節省磁碟空間
(3) 大資料量提取時varchar的磁碟IO消耗更低,意味著varchar綜合查詢效能會更好,所以實際應用中大資料量(多行)查詢返回,varchar的查詢效能比起char來要好出不少
(4)選擇char和varchar會改變整體資料結構的演算法以及儲存方式。在mysql應用中,如已存在varchar欄位,那麼其它所有的char欄位將以varchar方式儲存。
在MySQL中用來判斷是否需要進行對據列類型轉換的規則
1、在一個資料表裡,如果每一個資料列的長度都是固定的,那麼每一個資料行的長度也將是固定的.
2、只要資料表裡有一個資料列的長度的可變的,那麼各資料行的長度都是可變的.
3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,MySQL會把這個資料表裡的固定長度類型的資料列轉換為相應的可變長度類型.
例外:長度小於4個字元的char資料列不會被轉換為varchar類型
支援多語言的網站應考慮使用 Unicode nchar 或 nvarchar 資料類型以盡量減少字元轉換問題
mysql資料類型——字串char(m)和varchar(m)