亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(qū)別

 更新時間:2015年09月02日 11:07:46   投稿:hebedich  
char是一種固定長度的類型,varchar則是一種可變長度的類型,那么他們具體使用過程中有什么區(qū)別嗎

區(qū)別

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

下面的表格顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結(jié)果,說明了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é))。所以實(shí)際應(yīng)用中用戶可以根據(jù)自己的數(shù)據(jù)類型來做。

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

從CHAR(4)和VARCHAR(4)列檢索的值并不總是相同,因?yàn)闄z索時從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;

結(jié)果如下:

CONCAT(a, '+') CONCAT(b, '+')
ab + ab+

從上面可以看出來,由于某種原因CHAR有固定長度,所以在處理速度上要比VARCHAR快很多,但是相對浪費(fèi)存儲空間,所以對存儲不大,但在速度上有要求的可以使用CHAR類型,反之可以用VARCHAR類型來實(shí)現(xiàn)。

建議

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

總結(jié)分析:

文字字段若長度固定,如:身分證號碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
支持多語言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問題
文字字段若長度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲空間外,存取硬盤時也會較有效率

相關(guān)文章

最新評論