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

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年10月27日 15:15:27   作者:lamelo光  
varchar使用起來較為靈活,節(jié)省了一定的空間,但是它在判斷位數(shù)時也耗費了時間,從整個系統(tǒng)的性能角度來說,char數(shù)據(jù)類型處理的速度更快,有時甚至可以超出varchar處理速度的很多倍,本文給大家介紹
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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論