MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(qū)別
區(qū)別
CHAR與VARCHAR類型類似,但它們保存和檢索的方式不同。CHAR有固定的長(zhǎng)度,而VARCHAR屬于可變長(zhǎng)的字符類型。它們最大長(zhǎng)度和是否尾部空格被保留等方面也不同。在存儲(chǔ)和檢索過(guò)程中不進(jìn)行大小寫轉(zhuǎn)換。
下面的表格顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結(jié)果,說(shuō)明了CHAR和VARCHAR之間的差別:
值 CHAR(4) 存儲(chǔ)需求 VARCHAR(4) 存儲(chǔ)需求
'' ' ' 4個(gè)字節(jié) '' 1個(gè)字節(jié)
'ab' 'ab ' 4個(gè)字節(jié) 'ab' 3個(gè)字節(jié)
'abcd' 'abcd' 4個(gè)字節(jié) 'abcd' 5個(gè)字節(jié)
'abcdefgh' 'abcd' 4個(gè)字節(jié) 'abcd' 5個(gè)字節(jié)
從上面可以看得出來(lái)CHAR的長(zhǎng)度是固定的,不管你存儲(chǔ)的數(shù)據(jù)是多少他都會(huì)都固定的長(zhǎng)度。而VARCHAR則處可變長(zhǎng)度但他要在總長(zhǎng)度上加1字節(jié),這個(gè)用來(lái)存儲(chǔ)字符長(zhǎng)度(如果聲明的長(zhǎng)度超過(guò)255,則使用2個(gè)字節(jié))。所以實(shí)際應(yīng)用中用戶可以根據(jù)自己的數(shù)據(jù)類型來(lái)做。
請(qǐng)注意,上表中最后一行的值只適用不使用嚴(yán)格模式時(shí);如果MySQL運(yùn)行在嚴(yán)格模式,超過(guò)列長(zhǎng)度的值不被保存,并且會(huì)出現(xiàn)錯(cuò)誤。
從CHAR(4)和VARCHAR(4)列檢索的值并不總是相同,因?yàn)闄z索時(shí)從CHAR列刪除了尾部的空格。通過(guò)下面的例子說(shuō)明差別:
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+
從上面可以看出來(lái),由于某種原因CHAR有固定長(zhǎng)度,所以在處理速度上要比VARCHAR快很多,但是相對(duì)浪費(fèi)存儲(chǔ)空間,所以對(duì)存儲(chǔ)不大,但在速度上有要求的可以使用CHAR類型,反之可以用VARCHAR類型來(lái)實(shí)現(xiàn)。
建議
MyISAM存儲(chǔ)引擎 建議使用固定長(zhǎng)度,數(shù)據(jù)列代替可變長(zhǎng)度的數(shù)據(jù)列
INNODB 存儲(chǔ)引擎 建議使用VARCHAR類型
總結(jié)分析:
文字字段若長(zhǎng)度固定,如:身分證號(hào)碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
支持多語(yǔ)言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問題
文字字段若長(zhǎng)度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲(chǔ)空間外,存取硬盤時(shí)也會(huì)較有效率
- mysql中char與varchar的區(qū)別分析
- MySQL中把varchar類型轉(zhuǎn)為date類型方法詳解
- MySQL中字段類型char、varchar和text的區(qū)別
- MySQL數(shù)據(jù)庫(kù)char與varchar的區(qū)別分析及使用建議
- 對(duì)比MySQL中int、char以及varchar的性能
- MySQL數(shù)據(jù)庫(kù)中varchar類型的數(shù)字比較大小的方法
- MySQL數(shù)據(jù)庫(kù)varchar的限制規(guī)則說(shuō)明
- MySQL中varchar和char類型的區(qū)別
- MySQL中CHAR與VARCHAR類型舉例解析
相關(guān)文章
sql server自動(dòng)編號(hào)的三種方法
自增列是最簡(jiǎn)單和常見的方法,適用于大多數(shù)情況,本文介紹了SQL Server中三種常見的自動(dòng)編號(hào)方法:自增列、序列和觸發(fā)器,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
mysql刪除重復(fù)記錄并且只保留一條的實(shí)現(xiàn)方法
本文主要介紹了mysql刪除重復(fù)記錄并且只保留一條的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
MySQL安裝出現(xiàn)starting the server報(bào)錯(cuò)的解決方案
如果電腦是第一次安裝MySQL,一般不會(huì)出現(xiàn)這樣的報(bào)錯(cuò),如下圖所示,本文主要介紹了MySQL安裝出現(xiàn)starting the server報(bào)錯(cuò)的解決方案,感興趣的可以了解一下2024-07-07
Mysql TIMESTAMPDIFF函數(shù)示例詳解
這篇文章主要介紹了Mysql TIMESTAMPDIFF函數(shù)示例詳解,TIMESTAMPDIFF函數(shù)返回datetime_expr2 - datetime_expr1的結(jié)果,其中datetime_expr1和datetime_expr2可以是DATE或DATETIME類型值,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-03-03
結(jié)合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程
這篇文章主要介紹了結(jié)合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程,即在PHP程序中使用基本的SELECT FROM和INSERT INTO語(yǔ)句,需要的朋友可以參考下2015-12-12
MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析
這篇文章主要給大家介紹了關(guān)于MySQL查詢中LIMIT的大offset導(dǎo)致性能低下的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12

