char是一種固定長度的類型,varchar則是一種可變長度的類型,那么他們具體使用過程中有什么區別嗎
區別
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。除了可節省存儲空間外,存取硬盤時也會較有效率
新聞熱點
疑難解答