列類型學習
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 雖然直觀 , 但計算不便 .
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
