在前面爲大家分析了數據庫庫與表的基本操作,下面是對數據類型的一些總結:
數據類型:
數值類型:
越界測試:
說明: 在MySQL中,整型可以指定是有符號的和無符號的,默認是有符號的。
可以通過UNSIGNED來說明某個字段是無符號的
關於UNSIGNED細節:
int的表示範圍是-2147483648 ~ 2147483647,int unsigned 的範圍是0 ~ 4294967295。所以我們在很多時候需要使用unsigned來表示非負數,比如年齡等。然而在實際使用中,unsigned可能會帶來一些負面的影響:
執行select a - b from tt4; 這個結果會是怎樣的呢?結果肯定不是-1,但是可以對SQL_ MODE這個參數進行設置即可,例如:
注意:儘量不使用unsigned,因爲可能帶來一些意想不到的效果。另外,對於int類型可能存放不下的數據,int
unsigned同樣可能存放不下,與其如此,還不如設計時,將int類型提升爲bigint類型。
bit的使用:
基本語法: bit[(M)] 位字段類型。M表示每個值的位數,範圍從1到64。如果M被忽略,默認爲1。
bit使用的時候注意事項:bit字段在顯示時,是按照ASCII碼對應的值顯示。
如果我們有這樣的值,只存放0或1,這時可以定義bit(1)。這樣可以節省空間。
小數的基本使用:
float:
float[(m, d)][unsigned]
M指定顯示長度,d指定小數位數,佔用空間4個字節
小數:float(4,2)表示的範圍是-99.99 ~ 99.99,MySQL在保存值時會進行四捨五入。
說明:當我們的float(4,2)如果是一個有符號的,則表示範圍是-99.99 ~ 99.99。如果定義的是float(4,2) unsigned 這時,因爲把它指定爲無符號的數,範圍是 0 ~ 99.99
decimal:
decimal(m, d) [unsigned]
定點數m指定長度,d表示小數點的位數
decimal(5,2) 表示的範圍是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的範圍 0 ~ 999.99
decimal和float很像,但是有區別:float和decimal表示的精度不一樣
說明:float表示的精度大約是7位。
decimal整數最大位數m爲65。支持小數最大位數d是30。如果d被省略,默認爲0.如果m被省略,默認
是10。
建議:如果希望小數的精度高,推薦使用decimal。
字符串:
char(L): 固定長度字符串,L是可以存儲的長度,單位爲字符,最大長度值可以爲255
varchar(L): 可變長度字符串,L表示字符長度,最大長度65535個字節
測試char:
說明:char(2) 表示可以存放兩個字符,可以是字母或漢字,但是不能超過2個。
最多隻能是255
測試varchar:
關於varchar(len),len到底是多大,這個len值,和表的編碼密切相關:
varchar長度可以指定爲0到65535之間的值,但是有1 - 3 個字節用於記錄數據大小,所以說有效字節數
是65532。
當我們的表的編碼是utf8時,varchar(n)n最大值是65532/3=21844[因爲utf中,一個漢字佔用3個字
節],如果編碼是gbk,varchar(n)n最大是65532/2=32766(因爲gbk中,一個漢字佔用2字節)。
char和varcahr存儲空間比較:
日期和時間類型:
datetime 時間日期格式 'yyyy-mm-dd HH:ii:ss' 表示範圍從1000到9999,佔用八字節
date:日期 'yyyy-mm-dd',佔用三字節
timestamp:時間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss 格式和datetime完全一致,佔用四字節
建表:
插入數據:
更新數據:
枚舉和set:
創建調查表votes1,插入數據:
添加枚舉數據:
以上便是對數據庫中數據類型的一些基本總結,有不足的地方歡迎大家批評指正。