sql中的char與varchar有什么區(qū)別
sql中的char與varchar有什么區(qū)別,一起看看吧
我們在使用sql定義字符串類型的時候,經(jīng)常會看到char與varchar類型
create table t1(name char(5)); create table t2(name varchar(5));
作為初學者,我們就會對此感到疑惑,怎么一會用char,一會又用varchar,它們有什么區(qū)別呢
書上給它們的解釋是char為定長的字符串型,varchar為變長的字符串型,這個解釋雖然很簡潔,但也確實說明了要點,接下來我們來詳細聊聊它們的區(qū)別。
char(5)中的5實際上就是存儲該字符串的字符的個數(shù),如果我們給其插入”abc",DBMS在存儲的時候會自動在后面補兩個空格以達到5位,即“abc ”;而varchar(5)中的5指的是允許該字符串存儲的最大長度,我們插入幾位,只要沒超過這個長度,其內(nèi)部存儲就是幾位。
那我們能怎么實際的觀察到我們存儲的位數(shù)呢,我們以mysql為例,我們可以通過char_length()函數(shù)來查看存儲的字符的長度
insert into t1 values('abc');
insert into t2 values('abc');
select char_length(name) from t1;
select char_length(name) from t2;但是t1和t2表都顯示3,這是為什么呢?
這是由于mysql的檢索方式,mysql在檢索char類型的時候,它會自動去掉其中的空格,我們可以通過以下設(shè)置來改變mysql的方式來讓char顯形
SET sql_mode='PAD_CHAR_TO_FULL_LENGTH';
這時我們再通過char_length(name)來獲得name的存儲位數(shù),就會發(fā)現(xiàn)t1表為5,t2表為3。
接下來我們再來聊聊mysql的存儲機制

存儲char類型時,如果長度設(shè)為4,那其內(nèi)部會用空格給其填充空格固定4個字節(jié),所以這樣會浪費大量的空間;存儲varchar類型時,其會用一個字節(jié)存放它的位數(shù),然后再根據(jù)它的位數(shù)給它分配字節(jié)。
雖然varchar使用起來較為靈活,節(jié)省了一定的空間,但是它在判斷位數(shù)時也耗費了時間,從整個系統(tǒng)的性能角度來說,char數(shù)據(jù)類型處理的速度更快,有時甚至可以超出varchar處理速度的很多倍,所以在大部分情況下,我更推薦使用char類型,因為現(xiàn)在存儲空間已經(jīng)不是一種限制,我們更多的會去關(guān)注其的性能。
到此這篇關(guān)于sql中的char與varchar有什么區(qū)別的文章就介紹到這了,更多相關(guān)sql char與varchar區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL中varchar和char類型的區(qū)別
- MYSQL中 char 和 varchar的區(qū)別
- Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹
- MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(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)文章
Sql學習第四天——SQL 關(guān)于with cube,with rollup和grouping解釋及演示
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合,接下再看看對grouping的解釋,感興趣的朋友可以參考下哈2013-03-03
SQL Server誤區(qū)30日談 第15天 CheckPoint只會將已提交的事務(wù)寫入磁盤
這個誤區(qū)是由于太多人對日志和恢復系統(tǒng)缺少全面的了解而存在已久。CheckPoint會將自上次CheckPoint以來所有在內(nèi)存中改變的頁寫回磁盤(譯者注:也就是臟頁),或是在上一個CheckPoint讀入內(nèi)存的臟頁寫入磁盤2013-01-01
教你恢復SQLSERVER的master系統(tǒng)庫的方法
這篇文章主要介紹了恢復SQLSERVER的master系統(tǒng)庫,本文介紹可能需要恢復master數(shù)據(jù)庫的情況以及如何正確完成這些步驟,需要的朋友可以參考下2022-09-09
SQL?Server數(shù)據(jù)庫服務(wù)器內(nèi)存問題排查及解決方案
文章詳細介紹了處理SQL?Server數(shù)據(jù)庫服務(wù)器內(nèi)存爆滿的方案,包括立刻處理(快速釋放、恢復)和永久優(yōu)化方案(穩(wěn)定運行),同時,也提供了監(jiān)控預警的建議,感興趣的朋友跟隨小編一起看看吧2026-03-03

