sql中的char與varchar有什么區(qū)別,一起看看吧" />

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

sql中的char與varchar有什么區(qū)別

 更新時(shí)間:2023年10月27日 15:15:27   作者:lamelo光  
varchar使用起來較為靈活,節(jié)省了一定的空間,但是它在判斷位數(shù)時(shí)也耗費(fèi)了時(shí)間,從整個(gè)系統(tǒng)的性能角度來說,char數(shù)據(jù)類型處理的速度更快,有時(shí)甚至可以超出varchar處理速度的很多倍,本文給大家介紹
sql中的char與varchar有什么區(qū)別,一起看看吧

我們在使用sql定義字符串類型的時(shí)候,經(jīng)常會(huì)看到char與varchar類型

create table t1(name char(5));
create table t2(name varchar(5));

作為初學(xué)者,我們就會(huì)對此感到疑惑,怎么一會(huì)用char,一會(huì)又用varchar,它們有什么區(qū)別呢

書上給它們的解釋是char為定長的字符串型,varchar為變長的字符串型,這個(gè)解釋雖然很簡潔,但也確實(shí)說明了要點(diǎn),接下來我們來詳細(xì)聊聊它們的區(qū)別。

char(5)中的5實(shí)際上就是存儲(chǔ)該字符串的字符的個(gè)數(shù),如果我們給其插入”abc",DBMS在存儲(chǔ)的時(shí)候會(huì)自動(dòng)在后面補(bǔ)兩個(gè)空格以達(dá)到5位,即“abc  ”;而varchar(5)中的5指的是允許該字符串存儲(chǔ)的最大長度,我們插入幾位,只要沒超過這個(gè)長度,其內(nèi)部存儲(chǔ)就是幾位。

那我們能怎么實(shí)際的觀察到我們存儲(chǔ)的位數(shù)呢,我們以mysql為例,我們可以通過char_length()函數(shù)來查看存儲(chǔ)的字符的長度

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í)候,它會(huì)自動(dòng)去掉其中的空格,我們可以通過以下設(shè)置來改變mysql的方式來讓char顯形

SET sql_mode='PAD_CHAR_TO_FULL_LENGTH';

這時(shí)我們再通過char_length(name)來獲得name的存儲(chǔ)位數(shù),就會(huì)發(fā)現(xiàn)t1表為5,t2表為3。

接下來我們再來聊聊mysql的存儲(chǔ)機(jī)制

存儲(chǔ)char類型時(shí),如果長度設(shè)為4,那其內(nèi)部會(huì)用空格給其填充空格固定4個(gè)字節(jié),所以這樣會(huì)浪費(fèi)大量的空間;存儲(chǔ)varchar類型時(shí),其會(huì)用一個(gè)字節(jié)存放它的位數(shù),然后再根據(jù)它的位數(shù)給它分配字節(jié)。

雖然varchar使用起來較為靈活,節(jié)省了一定的空間,但是它在判斷位數(shù)時(shí)也耗費(fèi)了時(shí)間,從整個(gè)系統(tǒng)的性能角度來說,char數(shù)據(jù)類型處理的速度更快,有時(shí)甚至可以超出varchar處理速度的很多倍,所以在大部分情況下,我更推薦使用char類型,因?yàn)楝F(xiàn)在存儲(chǔ)空間已經(jīng)不是一種限制,我們更多的會(huì)去關(guān)注其的性能。

到此這篇關(guān)于sql中的char與varchar有什么區(qū)別的文章就介紹到這了,更多相關(guān)sql char與varchar區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論