MySQL中VARCHAR與CHAR格局數據的差別。本站提示廣大學習愛好者:(MySQL中VARCHAR與CHAR格局數據的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中VARCHAR與CHAR格局數據的差別正文
差別
CHAR與VARCHAR類型相似,但它們保留和檢索的方法分歧。CHAR有固定的長度,而VARCHAR屬於可變長的字符類型。它們最年夜長度和能否尾部空格被保存等方面也分歧。在存儲和檢索進程中不停止年夜小寫轉換。
上面的表格顯示了將各類字符串值保留到CHAR(4)和VARCHAR(4)列後的成果,解釋了CHAR和VARCHAR之間的差異:
值 CHAR(4) 存儲需求 VARCHAR(4) 存儲需求
'' ' ' 4個字節 '' 1個字節
'ab' 'ab ' 4個字節 'ab' 3個字節
'abcd' 'abcd' 4個字節 'abcd' 5個字節
'abcdefgh' 'abcd' 4個字節 'abcd' 5個字節
從下面可以看得出來CHAR的長度是固定的,不論你存儲的數據是若干他都邑都固定的長度。而VARCHAR則處可變長度但他要在總長度上加1字節,這個用來存儲字符長度(假如聲明的長度跨越255,則應用2個字節)。所以現實運用頂用戶可以依據本身的數據類型來做。
請留意,上表中最初一行的值只實用不應用嚴厲形式時;假如MySQL運轉在嚴厲形式,跨越列長度的值不被保留,而且會湧現毛病。
從CHAR(4)和VARCHAR(4)列檢索的值其實不老是雷同,由於檢索時從CHAR列刪除尾部的空格。經由過程上面的例子解釋差異:
mysql> CREATE TABLE test(a VARCHAR(4), b CHAR(4)); mysql> INSERT INTO test VALUES ('ab ', 'ab '); mysql> SELECT CONCAT(a, '+'), CONCAT(b, '+') FROM test;
成果以下:
CONCAT(a, '+') CONCAT(b, '+') ab + ab+
從下面可以看出來,因為某種緣由CHAR有固定長度,所以在處置速度上要比VARCHAR快許多,然則絕對糟蹋存儲空間,所以對存儲不年夜,但在速度上有請求的可使用CHAR類型,反之可以用VARCHAR類型來完成。
建議
MyISAM存儲引擎 建議應用固定長度,數據列取代可變長度的數據列
INNODB 存儲引擎 建議應用VARCHAR類型
總結剖析:
文字字段若長度固定,如:成分證號碼,就不要用 varchar 或 nvarchar,應當用 char 或 nchar。
支撐多說話的站點應斟酌應用 Unicode nchar 或 nvarchar 數據類型以盡可能削減字符轉換成績
文字字段若長度不固定,如:地址,則該用 varchar 或 nvarchar。除可節儉存儲空間外,存取硬盤時也會較有用率