列型別 字元型別

2022-06-22 08:33:10 字數 1704 閱讀 9271

在 sql 中,將字串型別分成了 6 類,分別為:char、varchar、text、blob、enum和set.

char:磁碟(二維表)在定義結構的時候就已經確定了最終資料的儲存長度。

變長字串:varchar,即在分配儲存空間的時候,按照最大的空間分配,但是實際用了多少,則是根據具體的資料來確定。

實際上,如果儲存長度超過 255 個字元,則既不用定長字串也不用變長字串,而是用文字字串text.

如何選擇定長字串或者是變長字串呢?

如果資料量非常大,通常說超過 255 個字元就會使用文字字串。

文字字串根據儲存的格式進行分類,可以分為:

列舉字串:enum,需要事先將所有可能出現的結果都設計好,實際上儲存的資料必須是規定好的資料中的乙個。

插入表中的資料只能是事先定義好的某乙個資料。

列舉字串的使用方式:

此外,列舉字串還有乙個作用,那就是:節省儲存空間(列舉資料通常都有乙個別名),列舉實際上儲存的是數值而不是字串本身。

列舉在進行資料規範(定義)的時候,系統會自動建立乙個數字與列舉元素的對應關係(放在日誌中);在進行資料插入的時候,系統自動將字串轉換為對應的數值進行儲存;在進行資料提取的時候,系統自動將數值轉換成對應的字串進行顯示。

通過閱讀以上列舉的原理,咱們可以知道:使用列舉的效率並不高(低於其他型別的資料),但能規範資料和節省儲存空間。

集合字串:set,跟列舉類似,實際儲存的是數值而不是字串。

集合字串的使用方式:

定義:set,元素列表;

使用:可以使用元素列表中的多個元素,用逗號分隔。

執行如下 sql 語句建立列舉表,進行測試:

-- 建立集合表create table my_set(hobby set('**','電影','旅行','美食','攝影','運動','寵物'))charset utf8;

再執行如下 sql 語句,向表my_set中插入測試資料:

-- 插入測試資料insert into my_set values ('電影,美食,寵物');insert into my_set values (3);

再執行如下 sql 語句,檢視表my_set中的資料:

-- 檢視資料select hobby + 0,hobby from my_set;

觀察上面的結果,相信大部分童鞋也懵啦!對於3還好理解,3=2+1,對應於集合中資料的編號,也正是**和電影;但是74是什麼鬼啊?在此,咱們不妨將集合('**','電影','旅行','美食','攝影','運動','寵物')中的元素選中的記為1,沒有選中的記為0,表示成二進位制,也就是:

再將上面的二進位制反過來:

不妨算算,上述二進位制對應的十進位制數,即為74.

到這裡,相信大家已經恍然大悟啦,原來:集合字串中每乙個元素都對應乙個二進位制位,其中被選中的為1,未選中的為0,最後在反過來,這個二進位制數對應的十進位制數即為其資料庫中實際儲存的是數值。

此外,集合字串中插入元素的順序並沒有影響,最終系統都會自動去匹配集合的順序,即:

-- 插入測試資料insert into my_set values ('電影,美食,旅行');insert into my_set values ('旅行,電影,美食');

上述兩個 sql 語句會產生相同的結果:

如上圖所示,顯然咱們的結論得到了驗證。

最後,集合的原理同列舉類似,因此可以的到相同的結論,即:使用集合的效率並不高(低於其他型別的資料),但能規範資料和節省儲存空間。

列型別和表型別

在定義變數時處理可以使用oracle規定的資料型別外,還可以使用 type和 rowtype來定義變數.type型別的變數是專門為儲存在資料列中檢索到的值而建立的.對於使用 type建立的變數,其資料型別由系統根據檢索的資料列的資料型別決定.rowtype型別的變數,它可以一次儲存從資料庫檢索的一行...

浮點列型別

對於浮點列型別,在mysql中單精度值使用4個位元組,雙精度值使用8個位元組。float型別用於表示近似數值資料型別。sql標準允許在關鍵字float後面的括號內選擇用位指定精度 但不能為指數範圍 mysql還支援可選的只用於確定儲存大小的精度規定。0到23的精度對應float列的4位元組單精度。2...

mysql列型別 mysql欄位型別

mysql欄位型別 mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。數值型別 型別大小範圍 有符號 範圍 無符號 用途 tinyint 1 位元組 128,127 0,255 小整數值 smallint 2 位元組 32 768,32 767 0,65 535 大整數值...