標籤:style blog http color ar sp strong 資料 div
原文: mysql基礎之基礎資料型別 (Elementary Data Type)
列類型學習
mysql三大列類型
整型
Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill
字串型
Char(M)
Varchar(M)
Text 文本類型
日期時間類型
Date 日期
Time 時間
Datetime 時間時間類型
Year 年類型
整形:
整型系列所佔位元組與儲存範圍的關係.
定性: 占位元組越多,儲存範圍越大.
: 是具體的數字分析
Tinyint 1個位元組 8個位 0 - 2^8-1 , 0-255
-2^7 ----> +2^7-1
分析:
Smallint 2個位元組 , 16位 0----2^16-1 = 65535
-2^15 ---> +2^15-1, -32768 -> 32767
一般而言,設某類型 N位元組
N位元組 , 8N位.
0 ----> 2^8N-1
-2^(8N-1) ---> +2^(8N-1) -1;
對於int型 : 占的位元組越多,儲存的範圍也越大.
整型系統的選擇性參數 : XXint(M) unsigned zerofill
例: age tinyint(4) unsigned ,或者 stunum smallint(6) zerofill;
Unsigned: 代表此列為無符號類型, 會影響到列的儲存範圍. (範圍從0開始)
(不加unsinged, 則該列預設是有符號類型,範圍從負數開始)
Zerofill: 代表0填充, 即: 如果該數字不足參數M位, 則自動補0, 補夠M位.
1: 如果沒有zerofill屬性, 單獨的參數M,沒有任何意義.
2:如果設定某列為zerofill,則該列已經預設為 unsigned,無符號類型.
小數型
Float(M,D),decimal(M,D)
M叫"精度" ---->代表"總位元",而D是"標度",代表小數位.(小數右邊的位元)
浮點數佔多大的空間呢
答: float 能存10^38 ,10^-38
如果M<=24, 點4個位元組,否則占8位元組
用來表示資料中的小數,除了float---浮點.
還有一種叫定點decimal,定點是把整數部分, 和小數部分,分開儲存的.
比float精確,他的長度是變化的.
空間上的區別:
Float(M,D), M<=24, 4個位元組, 24 <M <=53, 8個位元組
Decimal () ,變長位元組.
區別: decimal比float精度更高, 適合儲存貨幣等要求精確的數字,
見下例:
字串性:
Mysql 字串類型
Char 定長類型
Char(M) , M 代表寬度, 0<=M<=255之間
例:Char(10) ,則能輸入10個字元.
Varchar 變長類型
Varchar(M), M代表寬度, 0<=M<=65535(以ascii字元為例,utf822000左右)
0000000000
00\0\0\0\0\0 (char型,如果不夠M個字元,內部用空格補齊,取出時再把右側空格刪掉)
注:這意味著,如果右側本身有空格,將會丟失.
通過concat函數可以驗證!
M 代表字元長度,和是否是漢字和字母無關。
Blob,是二進位類型,用來儲存映像,音頻等二進位資訊.
意義: 2進位,0-255都有可能出現.
Blob在於防止因為字元集的問題,導致資訊丟失.
比如:一張圖片中有0xFF位元組, 這個在ascii字元集認為非法,在入庫的時候,被過濾了.
enum選擇一個,set選擇多個
日期時間類型
Year 年(1位元組) 95/1995, [1901-2155],
在insert時,可以簡寫年的後2位,但是不推薦這樣.
[00-69] +2000
[70-99] + 1900,
即: 填2位,表示 1970 - 2069
Date 日期 1998-12-31
範圍: 1000/01/01 ,9999/12/31
Time 時間 13:56:23
範圍: -838:59:59 -->838:59:59
datetime 時期時間 1998-12-31 13:56:23
範圍: 1000/01//01 00:00:00 ---> 9999:12:31 23:59:59
timestamp
時間戳記:
是1970-01-01 00:00:00 到當前的秒數.
一般存註冊時間,商品發布時間等,並不是用datetime儲存,而是用時間戳記.
因為datetime雖然直觀,但計算不便.
mysql基礎之基礎資料型別 (Elementary Data Type)