MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(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é)省存儲空間外,存取硬盤時也會較有效率
- sql中的char與varchar有什么區(qū)別
- MySQL中varchar和char類型的區(qū)別
- MYSQL中 char 和 varchar的區(qū)別
- Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹
- MySQL數(shù)據(jù)庫char與varchar的區(qū)別分析及使用建議
- 深入SQL Server中定長char(n)與變長varchar(n)的區(qū)別詳解
- 深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳解
- Sqlserver中char,nchar,varchar與Nvarchar的區(qū)別分析
- 詳解數(shù)據(jù)庫varchar與char有哪些區(qū)別
相關(guān)文章
MySQL性能優(yōu)化之table_cache配置參數(shù)淺析
這篇文章主要介紹了MySQL性能優(yōu)化之table_cache配置參數(shù)淺析,本文介紹了它的緩存機(jī)制、參數(shù)優(yōu)化及清空緩存的命令等,需要的朋友可以參考下2014-07-07MySQL生產(chǎn)庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程
這篇文章主要介紹了MySQL生產(chǎn)庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程,需要的朋友可以參考下2014-02-02mysql使用教程之分區(qū)表的使用方法(刪除分區(qū)表)
mysql分區(qū)表使用方法,新增分區(qū)、刪除分區(qū)、分區(qū)的合并、分區(qū)的拆分等使用方法2013-12-12解決MySQL登錄報(bào)錯1045-Access?denied?for?user?'root'@
這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯1045-Access?denied?for?user?‘root‘@‘‘(using?password:YES)的相關(guān)資料,文中一步步將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07淺談sql連接查詢的區(qū)別 inner,left,right,full
下面小編就為大家?guī)硪黄獪\談sql連接查詢的區(qū)別 inner,left,right,full。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10