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

MySQL數(shù)據(jù)類型之淺談字符串(string)

 更新時(shí)間:2022年10月01日 09:19:23   作者:leboop-L  
這篇文章主要介紹了MySQL數(shù)據(jù)類型之字符串(string)的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

字符類型(CHAR Types)

CREATE TABLE t1 (c1 CHAR(10));

該語句創(chuàng)建了一張t1表,表中只有一個(gè)字段c1,類型為char,char(10)括號中的10表示字段c1最多能夠存儲10個(gè)字符。

char最多可以存儲255個(gè)字符,最小可以存儲0個(gè)字符。

可以如下向表中插入數(shù)據(jù):

INSERT INTO t1 (c1) VALUES('');
INSERT INTO t1 (c1) VALUES('xy');
INSERT INTO t1 (c1) VALUES('0123456789');

該語句向c1字符中分別插入了長度為0,2和10的三個(gè)字符,可以如下查詢數(shù)據(jù):

select * from t1

結(jié)果如圖:

雖然插入了兩條不足10個(gè)字符的數(shù)據(jù),但是MySQL在存儲char類型數(shù)據(jù)時(shí),仍然占用10個(gè)字符個(gè)空間,它在不足10個(gè)字符的右邊添加空白字符補(bǔ)足10個(gè)字符長度,所以char類型存儲時(shí)的長度是固定的。

可以如下查詢字符長度:

SELECT c1, CHAR_LENGTH(c1) FROM t1;

結(jié)果如圖:

有人肯定要問,剛剛不是說每個(gè)值都應(yīng)該是10個(gè)字符長度嗎?沒錯(cuò)。但是MySQL在查詢char類型數(shù)據(jù)時(shí),默認(rèn)做了一個(gè)處理,它將值后面的所有空格全部移除,然后再將結(jié)果返回給我們。

也就是上面的這個(gè)結(jié)果??梢匀缦聛砣∠@個(gè)處理

SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';

再次執(zhí)行上面的這個(gè)查詢,結(jié)果是:

圖中豎線是鼠標(biāo)光標(biāo)位置,光標(biāo)前面就是10個(gè)空白字符。

可變字符類型(Varchar Types)

varchar類型和char類型非常相似。如下創(chuàng)建一張表t2

CREATE TABLE t2 (c1 VARCHAR(10));

該表c1字段是varchar類型,10也是表示c1字符能夠存儲的最大字符長度。如下向表中插入三條數(shù)據(jù)

INSERT INTO t2 (c1) VALUES('');
INSERT INTO t2 (c1) VALUES('xy');
INSERT INTO t2 (c1) VALUES('0123456789');

不同的是MySQL在存儲VARCHAR類型時(shí),存儲實(shí)際長度,也就是說存儲c1字段的值時(shí)分別占用0、2和10個(gè)字符空間(實(shí)際要大1-2個(gè)字節(jié)用于存儲字符長度),這點(diǎn)和char類型是不同的。

可以執(zhí)行如下語句來驗(yàn)證

SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
SELECT c1, CHAR_LENGTH(c1) FROM t2;

設(shè)置sql_mode之前和之后,c1的長度不變,如圖:

varchar類型能夠存儲最多65535個(gè)字符,但是需要注意,不是每個(gè)表的字段都能申請到這個(gè)長度,因?yàn)镸ySQL對單行的大小限制為65535個(gè)字節(jié),也就是表的一行的所有字段大小的和不能超過65535個(gè)字節(jié)。如果其他字段已經(jīng)申請了比較大的空間,那么c1字段可能就不能申請65535個(gè)字符空間了。

(1)存儲超過定義時(shí)指定長度的字符

這個(gè)由sql_mode決定,在strict mode下,插入失敗并報(bào)錯(cuò),在非strict mode會(huì)插入成功,超過部分會(huì)被截取掉,如圖:

strict mode:

重新設(shè)置sql_mode變量,再插入:

二進(jìn)制類型(BINARY Types)

binary類型和char類型很相似,binary類型存儲的是字節(jié)串而不是字符串,存儲的最大字節(jié)串長度也是255,binary類型存儲不足長度的值時(shí)也是在值的右邊進(jìn)行補(bǔ)全,不過用于補(bǔ)全的值是0x00(字符表示為'\0'),但查詢時(shí)會(huì)保留尾部補(bǔ)全的值。

例如對于BINARY(3),插入'a '時(shí),存儲的是'a \0',插入'a\0'時(shí),存儲的是'a\0\0',查詢時(shí)分別是'a \0'和'a\0\0'。

可以如下驗(yàn)證

CREATE TABLE t3 (c BINARY(3));
INSERT INTO t3 VALUES('a');
SELECT c,CHAR_LENGTH(c),HEX(c),c = 'a', c = 'a\0\0' from t3;

結(jié)果如圖:

說明查詢到的是'a\0\0',不過顯示的是a。

可變二進(jìn)制類型(VARBINARY Types)

varbinary和varchar類似,存儲的是字節(jié)串,存儲的最大字節(jié)長度為65535,存儲實(shí)際定義的字節(jié)長度,不會(huì)在尾部用'\0'補(bǔ)全,查詢時(shí)當(dāng)然也就沒有移除尾部補(bǔ)全的值。

二進(jìn)制大對象類型(BLOB Types)

blob類型可以看成是varbinary類型,可以存儲超大二進(jìn)制數(shù)據(jù)。

根據(jù)存儲長度不同又分為四種: TINYBLOB, BLOB, MEDIUMBLOB, 和 LONGBLOB。

文本類型(Text Types)

text可以看成是varchar,可以存儲超大的字符串?dāng)?shù)據(jù)。

根據(jù)存儲長度不同又分為四種:TINYTEXT, TEXT,MEDIUMTEXT和 LONGTEXT.

枚舉類型(ENUM Type)

枚舉類型主要用于某個(gè)列的取值只有有限的幾個(gè),比如表示星期幾的列,只會(huì)是星期一,星期二,...,星期日這個(gè)值。

可以如下創(chuàng)建枚舉類型:

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

 如下插入一些數(shù)據(jù)

INSERT INTO shirts (name, size) VALUES 
('dress shirt','large'),
('t-shirt','medium'),
('polo shirt','ss');

結(jié)果如下:

當(dāng)插入的值不在枚舉類型中,size中會(huì)是空白。可以通過索引進(jìn)行查詢:

select * from shirts where size=4

等價(jià)于

select * from shirts where size='larger'

'x-small', 'small', 'medium', 'large', 'x-large'的索引分別是1,2,3,4,NULL的索引是NULL,空字符串''的索引是0。

枚舉類型中可以有65535個(gè)不同的取值。

集合類型(SET Type)

有時(shí)候,一個(gè)列的取值只可能是有限個(gè)值的不重復(fù)組合,如下創(chuàng)建集合類型

CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

插入數(shù)據(jù): 

INSERT INTO myset (col) VALUES 
('a,d'),
('d,a'), 
('a,d,a'), 
('a,d,d'), 
('d,a,d');

結(jié)果如圖:

從結(jié)果來看,集合類型中的集合就是數(shù)學(xué)中的集合,滿足無序和不重復(fù)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql 數(shù)據(jù)插入優(yōu)化方法

    mysql 數(shù)據(jù)插入優(yōu)化方法

    當(dāng)一個(gè)線程對一個(gè)表執(zhí)行一個(gè)DELAYED語句時(shí),如果不存在這樣的處理程序,一個(gè)處理器線程被創(chuàng)建以處理對于該表的所有DELAYED語句。
    2010-12-12
  • mysql VARCHAR的最大長度到底是多少

    mysql VARCHAR的最大長度到底是多少

    今天群里有人問varchar 不是最大應(yīng)該只可以設(shè)置65532(第一個(gè)字節(jié)+兩個(gè)長度字節(jié))嗎 ,但是為什么可以設(shè)置成65533
    2012-10-10
  • MySQL 從一張表update字段到另外一張表中

    MySQL 從一張表update字段到另外一張表中

    使用MySQL 4.0版或更高更新您可以通過加入兩個(gè)或多個(gè)表一起一表;通過加入兩個(gè)表連同您可以更新一個(gè)表的記錄在相關(guān)領(lǐng)域的總部設(shè)在另一個(gè)表。
    2015-09-09
  • MySQL中的隱藏列的具體查看

    MySQL中的隱藏列的具體查看

    mysql中存在一些隱藏列,例如行標(biāo)識、事務(wù)ID、回滾指針等,不知道大家是否和我一樣好奇過,要怎樣才能實(shí)際地看到這些隱藏列的值呢,感興趣的可以了解一下
    2021-09-09
  • MySQL修改lower_case_table_names參數(shù)的方法實(shí)踐

    MySQL修改lower_case_table_names參數(shù)的方法實(shí)踐

    本文主要介紹了MySQL修改lower_case_table_names參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • MySQL 主從復(fù)制數(shù)據(jù)不一致的解決方法

    MySQL 主從復(fù)制數(shù)據(jù)不一致的解決方法

    本文主要介紹了MySQL 主從復(fù)制數(shù)據(jù)不一致的解決方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • mysql自動(dòng)化安裝腳本(ubuntu and centos64)

    mysql自動(dòng)化安裝腳本(ubuntu and centos64)

    這篇文章主要介紹了mysql自動(dòng)化安裝腳本(ubuntu and centos64),需要的朋友可以參考下
    2014-05-05
  • MySQL中執(zhí)行計(jì)劃explain命令示例詳解

    MySQL中執(zhí)行計(jì)劃explain命令示例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中執(zhí)行計(jì)劃explain命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用explain命令具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面說來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • MySQL限制查詢和數(shù)據(jù)排序介紹

    MySQL限制查詢和數(shù)據(jù)排序介紹

    這篇文章主要介紹了MySQL限制查詢和數(shù)據(jù)排序介紹,通過limit可以限制返回結(jié)果的行數(shù),而當(dāng)數(shù)據(jù)查詢出來以后,我們可以對數(shù)據(jù)進(jìn)行排序處理。在末尾使用order?by語句,下文相關(guān)詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)如何解決

    mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)如何解決

    這篇文章主要介紹了mysql數(shù)據(jù)庫id主鍵自增加刪除后不連續(xù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論