展會信息港展會大全

MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(qū)別
來源:互聯(lián)網(wǎng)   發(fā)布日期:2015-09-21 21:40:28   瀏覽:9806次  

導讀:區(qū)別 CHAR與VARCHAR類型類似,但它們保存和檢索的方式不同。CHAR有固定的長度,而VARCHAR屬于可變長的字符類型。它們最大長度和是否尾部空格被保留等方面也不同。在存儲和檢索過程中不進行大小寫轉換。 下面的表格顯示了將各種字符串值保存到CHAR(4)和VARCHA...

區(qū)別

CHAR與VARCHAR類型類似,但它們保存和檢索的方式不同。CHAR有固定的長度,而VARCHAR屬于可變長的字符類型。它們最大長度和是否尾部空格被保留等方面也不同。在存儲和檢索過程中不進行大小寫轉換。

下面的表格顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結果,說明了CHAR和VARCHAR之間的差別:

值 CHAR(4) 存儲需求 VARCHAR(4) 存儲需求

'' ' ' 4個字節(jié) '' 1個字節(jié)

'ab' 'ab ' 4個字節(jié) 'ab' 3個字節(jié)

'abcd' 'abcd' 4個字節(jié) 'abcd' 5個字節(jié)

'abcdefgh' 'abcd' 4個字節(jié) 'abcd' 5個字節(jié)

從上面可以看得出來CHAR的長度是固定的,不管你存儲的數(shù)據(jù)是多少他都會都固定的長度。而VARCHAR則處可變長度但他要在總長度上加1字節(jié),這個用來存儲字符長度(如果聲明的長度超過255,則使用2個字節(jié))。所以實際應用中用戶可以根據(jù)自己的數(shù)據(jù)類型來做。

請注意,上表中最后一行的值只適用不使用嚴格模式時;如果MySQL運行在嚴格模式,超過列長度的值不被保存,并且會出現(xiàn)錯誤。

從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類型來實現(xiàn)。

建議

MyISAM存儲引擎 建議使用固定長度,數(shù)據(jù)列代替可變長度的數(shù)據(jù)列

INNODB 存儲引擎 建議使用VARCHAR類型

總結分析:

文字字段若長度固定,如:身分證號碼,就不要用 varchar 或 nvarchar,應該用 char 或 nchar。

支持多語言的站點應考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉換問題

文字字段若長度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲空間外,存取硬盤時也會較有效率


贊助本站

相關熱詞: MySQL VARCHAR CHAR

相關內(nèi)容
AiLab云推薦
展開

熱門欄目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能實驗室 版權所有    關于我們 | 聯(lián)系我們 | 廣告服務 | 公司動態(tài) | 免責聲明 | 隱私條款 | 工作機會 | 展會港