sql中的char與varchar有什么區(qū)別
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)文章希望大家以后多多支持腳本之家!
- 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)文章
Microsoft SQL Server數(shù)據(jù)庫各版本下載地址集合
這篇文章主要介紹了Microsoft SQL Server數(shù)據(jù)庫各版本下載地址集合,需要的朋友可以參考下2020-10-10SQL語句中的ON DUPLICATE KEY UPDATE使用
本文主要介紹了SQL語句中的ON DUPLICATE KEY UPDATE使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08SQL Server設(shè)置主鍵自增長列(使用sql語句實(shí)現(xiàn))
主鍵自增長列在進(jìn)行數(shù)據(jù)插入的時(shí)候,很有用的,如可以獲取返回的自增ID值,接下來將介紹SQL Server如何設(shè)置主鍵自增長列,感興趣的朋友可以了解下,希望本文對你有所幫助2013-01-01SQL?Server數(shù)據(jù)庫連接查詢和子查詢實(shí)戰(zhàn)案例
子查詢(嵌套查詢)子查詢也稱嵌套查詢,是指一個(gè)SELECT查詢語句可以嵌入另一個(gè)SELECT查詢語句之中,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫連接查詢和子查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04關(guān)于SQL中CTE(公用表表達(dá)式)(Common Table Expression)的總結(jié)
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個(gè)SQL片斷,該SQL片斷會(huì)被整個(gè)SQL語句所用到2012-08-08Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案
本文主要介紹了Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01