基礎 字串型別

2021-07-17 00:14:10 字數 2647 閱讀 2729

github:

mysql 中提供多種字串儲存型別,分別為:

char, varchar,binary,varbinary,blob,text,enum 和 set 等等型別。

咱們主要選擇最常用的分析。

對於 char 和 varchar 型別,mysql 與 oracle 同樣是用於儲存字串,但是設計邏輯完全實踐結果有很大區別。

二者的儲存方式不同:

char 用於儲存定長字串,長度0~255,而 varchar 用於儲存變長字串,長度0~65535(5.0.3之前的是255)。

在 mysql 中,檢索的時候 char 刪除了尾部空格,而 varchar 則保持尾部空格,同樣,char 儲存時自動截掉了尾部空格,

varchar 則保持尾部空格存入。

在 oracle 中,是不會刪除 char 的尾部空格的。

通過例項看現象:

從實驗結果,查詢長度可以看到,第一次插入'ab  ',尾部有空格,char沒有存入尾部空格,

而varchar則保留空格存入,第二次插入'ab',二者長度都是2。這就是二者在mysql中的區別。

以下單獨針對oracle中char和varchar不同空格處理能力進行分析:

create table t1 (

v varchar(4),

c char(4)

);-- oracle中char為定長,varchar為變長,

-- 'ab ',分別存入資料庫長度均為4位

insert into t1 values('ab ','ab ');

commit;

select length(v),length(c) from t1;

-- 如果存入的是'ab',哪麼對於varchar的長度是2位,

-- 而對於char的長度是4位,這是因為varchar自動根據

-- 實際情況分配長度,節省空間,而char則是根據定義

-- 的長度4位進行儲存,不夠的補空串儲存,浪費空間。

-- 但是,char定長的查詢速度比varchar快,char比varchar

-- 浪費儲存空間,這就是計算機中時間和空間永遠不可調和的矛盾,

-- 實際使用時比如身份證查詢等定長字串可以考慮用char,

-- 而其他不是經常用於查詢,對查詢效率沒有很高要求的,可以考慮

-- 用varchar,有時候需要時間快,有時候需要節省儲存空間

insert into t1 values('ab','ab');

commit;

select length(v),length(c) from t1;

oracle以上最後乙個語句查詢的結果:

mysql與oracle關於定長與變長的總結:

(1)mysql中存入'ab  ', char去掉空格,存入2位,varcahr保留空格存入4位;

如果都存入'ab', char和varchar二者都是兩位存入。

(2)oracle中存入'ab  ',char和varchar兩者都存入4位;

如果都 存入'ab', char是定長,存入4位,自動補了兩位空,

varchar是變長,存入2位,自動根據實際長度分配存入空間。

對於mysql中char會自動去掉末尾空格,這是mysql的優點,oracle中char確沒有這樣的自動功能。

mysql與oracle的區別在於,mysql的char會自動去掉尾部空格儲存,而oracle不會,

mysql中char尾部沒有空格的,按實際長度存入,而oracle中實際不足定義位數,自動補空到定長位儲存。

binary和varbinary類似於char和varchar,不同的是他們包含二進位制字串而不包含非二進位制字串。

通過例項**一下二者的儲存:

通過hex()轉換為16進製制。

字串中的enum稱為列舉型別,它的值範圍需要在建立的時候通過列舉方式顯示的指定,最多執行儲存65535個成員。

通過insert語句批量插入('m'),('1'),('2'),('f'),('f'),(null)六個元素,其中數字1表示取enum('m','f')中第一元素m,而數字2表示取第二個元素f,

而對於小寫f,是不區分大小寫的。最後一次插入了乙個3,直接報錯,因為enum('m','f')中根本找不到第三個元素,只能報錯了。

對於插入數值,如果從enum中找到元素就用找到的元素插入,找不到就報錯,不會給你預設插入第乙個或第二個,證明有些書上說的跟

實際的不一樣。

set與enum類似,最大的不同之處在於set可以一次選取多個元素,而enum一次只能選擇乙個元素。

從插入元素可以看出,**於set定義時所有元素的組合,不在元素範圍,將報錯,同時,如果組合重複,自動去重處理。

C 基礎 String(字串)型別

字串型別是開發過程中使用頻率較高的資料型別之一,用於儲存一組字元。一 字串 1 字串的不可變性 當你給乙個字串重新賦值之後,老值並沒有銷毀,而是重新開闢一塊空間儲存新值。當程式結束後,gc掃瞄整個記憶體,如果發現有的空間沒有被指向,則立即把它銷毀。2 我們可以將字串看做是char型別的乙個唯讀陣列。...

redis 基礎與字串型別

全域性命令 redis是單執行緒架構 資料型別 set keyvalue ex seconds px milliseconds nx xx ex seconds 表示秒級過期時間 px milliseconds 表示毫秒級過期時間 nx 表示鍵必須不存在,才能新增成功,用於新增乙個新鍵,合成簡寫命令...

mysql字串型別 mysql 字串型別

字串型別 字串型別指char varchar binary varbinary blob text enum和set。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。型別大小用途 char0 255位元組定長字串 varchar0 65535 位元組變長字串 tinyblob0 255位元組...