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

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

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ū)別,一起看看吧

我們?cè)谑褂胹ql定義字符串類型的時(shí)候,經(jīng)常會(huì)看到char與varchar類型

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

作為初學(xué)者,我們就會(huì)對(duì)此感到疑惑,怎么一會(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í)我們?cè)偻ㄟ^char_length(name)來獲得name的存儲(chǔ)位數(shù),就會(huì)發(fā)現(xiàn)t1表為5,t2表為3。

接下來我們?cè)賮砹牧膍ysql的存儲(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • Microsoft SQL Server數(shù)據(jù)庫各版本下載地址集合

    Microsoft SQL Server數(shù)據(jù)庫各版本下載地址集合

    這篇文章主要介紹了Microsoft SQL Server數(shù)據(jù)庫各版本下載地址集合,需要的朋友可以參考下
    2020-10-10
  • SQL語句中的ON DUPLICATE KEY UPDATE使用

    SQL語句中的ON DUPLICATE KEY UPDATE使用

    本文主要介紹了SQL語句中的ON DUPLICATE KEY UPDATE使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SQL Server設(shè)置主鍵自增長列(使用sql語句實(shí)現(xiàn))

    SQL Server設(shè)置主鍵自增長列(使用sql語句實(shí)現(xiàn))

    主鍵自增長列在進(jìn)行數(shù)據(jù)插入的時(shí)候,很有用的,如可以獲取返回的自增ID值,接下來將介紹SQL Server如何設(shè)置主鍵自增長列,感興趣的朋友可以了解下,希望本文對(duì)你有所幫助
    2013-01-01
  • 一些有用的sql語句整理 推薦收藏

    一些有用的sql語句整理 推薦收藏

    一些有用的sql語句整理,學(xué)習(xí)sqlserver的朋友可以參考下。一些很常用的命令。建議大家收藏下。
    2011-03-03
  • SQL?Server數(shù)據(jù)庫連接查詢和子查詢實(shí)戰(zhàn)案例

    SQL?Server數(shù)據(jù)庫連接查詢和子查詢實(shí)戰(zhàn)案例

    子查詢(嵌套查詢)子查詢也稱嵌套查詢,是指一個(gè)SELECT查詢語句可以嵌入另一個(gè)SELECT查詢語句之中,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫連接查詢和子查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • sql根據(jù)表名獲取字段及對(duì)應(yīng)說明

    sql根據(jù)表名獲取字段及對(duì)應(yīng)說明

    sql根據(jù)表名獲取字段及對(duì)應(yīng)說明,需要的朋友可以參考下。
    2010-09-09
  • 關(guān)于SQL中CTE(公用表表達(dá)式)(Common Table Expression)的總結(jié)

    關(guān)于SQL中CTE(公用表表達(dá)式)(Common Table Expression)的總結(jié)

    WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個(gè)SQL片斷,該SQL片斷會(huì)被整個(gè)SQL語句所用到
    2012-08-08
  • 基于sqlserver的四種分頁方式總結(jié)

    基于sqlserver的四種分頁方式總結(jié)

    下面小編就為大家分享一篇基于sqlserver的四種分頁方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案

    Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案

    本文主要介紹了Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 最新評(píng)論