目錄
1,數據類型分類
2,bit類型
3,小數類型
3-1,float/double類型
3-2,decimal類型
4,字符串類型
4-1,char
4-2,varchar
5,日期和時間類型
6,enum和set
1,數據類型分類
說明:
????????在MySQL中,整型可以指定是有符號的和無符號的,默認是有符號的。可以通過在類型后面加上UNSIGNED來說明某個字段是無符號的。
2,bit類型
????????bit(M):位字段類型。M表示位數,范圍從1到64。如果M被忽略,默認為1。
mysql> create table tt4 ( id int, a bit(8));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tt4 values(10, 10);
Query OK, 1 row affected (0.01 sec)
mysql> select * from tt4;? ?#發現很怪異的現象,a的數據10沒有出現
+------ + ------ +
| id | a |
+------ + ------ +
| 10 | ????|
+------ + ------ +
1 row in set(0.00 sec)mysql > insert into tt4 values(65, 65);?
mysql > select* from tt4;
+------ + ------ +
| id | a |
+------ + ------ +
| 10 | ????|
| ??65 | A |
+------ + ------ +
? ? ? ? 說明:bit字段在顯示時,是按照ASCII碼對應的值顯示。其次,如果我們有這樣的值,只存放0或1,這時可以定義bit(1)。這樣可以節省空間。
mysql > create table tt5(gender bit(1));
mysql > insert into tt5 values(0);
Query OK, 1 row affected(0.00 sec)
mysql > insert into tt5 values(1);
Query OK, 1 row affected(0.00 sec)
mysql > insert into tt5 values(2);? ?#當插入2時,已經越界了
ERROR 1406 (22001) : Data too long for column 'gender' at row 1
3,小數類型
3-1,float/double類型
????????float(m, d)?[unsigned]:m指定總長度,d指定小數位數,占用空間4個字節。
樣例:
????????float(4,2):表示的范圍是-99.99 ~ 99.99。
????????float(4,2) unsigned:范圍是0 ~ 99.99,因為把它指定為無符號的數。
注意:
? ? ? ? 若插入數值時的長度超過了定義的長度,MySQL在保存值時會根據存儲長度的范圍進行四舍五入,如定義類型float(4,2),插入 23.456 或 23.454 時,存儲的是 23.46 或 23.45;插入 99.996 時,存儲的是 99.99。
3-2,decimal類型
? ? ? ? decimal用法跟float一樣,不同的是 decimal 表示的精度跟 float 不一樣。
????????float表示的精度大約是7位,decimal的精度更高。其中,它整數最大位數m為65。支持小數最大位數d是30。如果d被省略,默認為0;如果m被省略,默認是10。
4,字符串類型
4-1,char
????????char(L):固定長度字符串,L是可以存儲的長度,單位為字符,最大長度值可以為255。
樣例:
????????char(2):表示可以存放兩個字符,可以是字母或漢字,但是不能超過2個。
4-2,varchar
????????varchar(L):可變長度字符串,L表示字符長度,最大長度65535個字節。varchar會根據存儲字符的長度來開辟空間。
說明:
? ? ? ? 若有一個 varchar(255) 類型的列,并且存儲了一個長度為 10 的字符串,那么它只會占用 10 個字符加上長度信息的空間,而不是固定的 255 個字符的空間。
5,日期和時間類型
????????常用的日期有如下三個:
? ? ? ? 1,date:日期格式為 'yyyy-mm-dd',占用三字節。
? ? ? ? 2,datetime:時間日期格式 'yyyy-mm-dd HH:ii:ss',表示范圍從1000到9999,占用八字節
? ? ? ? 3,timestamp:時間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字節。
6,enum和set
enum說明:
????????enum是一個枚舉,在mysql中表示 “單選” 類型,比如一個人的性別,姓名等。該設定只是提供了若干個選項的值,最終插入一個單元格中,實際只存儲了其中的一個值;而且出于效率考慮,這些值實際存儲的是“數字”,因為這些選項的每個選項值依次對應如下數字:1,2,3,....最多65535個;當我們添加枚舉值時,也可以添加對應的數字編號,這一點跟高級語言中的枚舉一樣。
語法:
????????enum('選項1','選項2','選項3',...);
set說明:
????????set是一個集合,在mysql中表示 “多選” 類型,比如一個人喜歡的運動等。該設定只是提供了若干個選項的值,最終插入一個單元格中,可存儲其中任意多個選項值。它與enum一樣,這些選項值實際存儲的是 “數字”,每個選項值依次對應如下數字:1,2,4,8,16,32,.... 最多64個,它也可以使用編號形式插入。
語法:
????????set('選項值1','選項值2','選項值3', ...);
插入數據
? ? ? ? 由于enum是單選,所以enum查詢數據跟一般形式一樣。set是集合形式,它的查詢方式需要使用?find_ in_ set函數。
????????find_in_set(sub,str_list):如果sub在str_list中,則返回下標;如果不在,返回0;str_list是一個用逗號分隔的字符串。使用方式如下圖:
? ? ? ? 下面來運用SQL指令查詢相關信息。?
enum查詢數據?
set查詢數據
????????最后說明下,不建議在添加枚舉值或集合值的時候采用數字的方式,因為不利于閱讀。