MySQL-TEXT&ENUM&SET類型

大家會不會想,哎呀 ,數據庫怎麼這麼多類型呀,寶寶要哭了

其實不用想多了  數據庫得類型比上編程語言得類型種類還是小巫見大巫呢

作爲開發人員得話  能操作數據庫就可以了 (當然也可以學習一下底層得源碼),但就使用而言,數據庫是非常簡單。

一.TEXT類型

TEXT類型是一種特殊的字符串類型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其長度和存儲空間的對比下表所示:

各種TEXT類型的區別在於允許的長度和存儲空間不同。因此,在這幾種TEXT類型中,根據需求選取既能滿足需要又節省空間的類型即可。

特別注意

  1. 以上各類型無須指定長度!
  2. 允許的長度是指實際存儲的字節數,而不是實際的字符個數,比如假設一箇中文字符佔兩個字節, 那麼TEXT 類型可存儲 65535/2 = 32767  箇中文字符,而varchar(100)可存儲100箇中文字 符,實際佔200個字節,但varchar(65535) 並不能存儲65535箇中文字符,因爲已超出表達範圍.

mysql> use test;   #選擇數據庫test

mysql> create table text_example(e_text tinytext, v_char varchar(255)); #創建數據庫表,e_text 可存儲255個字節,v_char可存儲255個字符   

 

mysql> insert into char_example values(90箇中文字符,90箇中文字符);  #插入失敗,utfmb4 用3個字節表示一箇中文漢字,會超出tinytext 保存範圍

 

mysql> insert into char_example values(80箇中文字符,100箇中文字符);  #插入成功    

 

實戰建議

  • 1、 char長度固定, 即每條數據佔用等長字節空間;適合用在身份證號碼、手機號碼等定。超過255字       節的只能用varchar或者text;
  • 2、 varchar可變長度,可以設置最大長度;適合用在長度可變的屬性。
  • 3、 text不設置長度, 當不知道屬性的最大長度時,適合用text, 能用varchar的地方不用text;
  • 4、 如果都可以選擇,按照查詢速度: char最快, varchar次之,text最慢

 

二.ENUM 和SET類型

1.ENUM類型

ENUM類型又稱爲枚舉類型。在創建表時,ENUM類型的取值範圍以列表的形式指定,其基本形式如下:

    屬性名  ENUM('值1',  '值2', …, '值n')

其中,“屬性名”參數指字段的名稱,“值n”參數表示列表中的第n個值。ENUM類型的值只能取列表中的一個元素。其取值列表中最多能有65535個值。如果數據值列表在255個以內,那麼一個字節就夠,如果超過255但是小於65535,那麼系統採用兩個字節保存。列表中的每個值獨有一個順序排列的編號,MySQL中存入的是這個編號,而不是列表中的值。默認編號從1開始!

Enum(,’女’,‘選擇保密’)  # ‘男’=>1  ‘女’=>2  ‘選擇保密’=> 3

mysql> use test;   #選擇數據庫test

mysql> create table enum_example (e_enum enum('男','女','選擇保密') ); #創建表 

mysql> insert into enum_example values('男');  #插入記錄,必須是enum 選項中的值

mysql> insert into enum_example values(1);  #插入記錄可以用數值表示

mysql>select e_enum + 0  from enum_example; #查詢enum 選項對應的整數值

如果ENUM類型加上了NOT NULL屬性,其默認值爲取值列表的第一個元素。如果不加NOT NULL屬性,ENUM類型將允許插入NULL,而且NULL爲默認值。

2.SET類型

在創建表時,SET類型的取值範圍就以列表的形式指定了,其基本形式如下:

    屬性名  SET('值1',  '值2', …, '值n')

其中,屬性名參數指字段的名稱,“值n”參數表示列表中的第n個值,這些值末尾的空格將會被系統直接刪除。其基本形式與ENUM類型一樣。SET類型的值可以取列表中的一個元素或者多個元素的組合。取多個元素時,不同元素之間用逗號隔開。SET類型的值最多隻能是由64個元素構成的組合。

mysql> use test;   #選擇數據庫test

mysql> create table set_example (interest set('足球','追劇','籃球','撩妹') ); #創建表 

mysql> insert into set_example values( '足球,撩妹' ); #插入記錄,必須是enum 選項中的值

mysql> insert into enum_example values(9);  #插入相應位效果等同,9 =>1001 選擇1,4

mysql>select interest+0 from set_example;  #以整數的方式查詢

 

 

更多的關於數據庫我會在下面的文章中陸續的分享,也可以關注‘奇牛學院’

來一起討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章