數值類型
數值類型大致劃分為兩大類:一個是整數,一個是浮點數或小數。
整數類型常用的為int類型,允許范圍在(-2147483648,2147483648)之間。
浮點數或小數常用類型有:float,double和decimal類型。
float類型(單精度浮點數值),double類型(雙精度浮點數值),decimal類型(用於要求非常高的精確度計算中,這些類型允許指定數值的精確度和計數方法作為選擇參數。精確度在這裡是指為這個值保存的有效數字的總個數,而計數方法表示小數點後數字的個數)
create table data(age float(5,2));
insert into data(45.678);//結果保留兩位小數,四捨五入,結果為45.68
字符串類型
常用字符串類型有:char,varchar,text和blob類型
char類型:用於定長字符串,必須在圓括號內用一個大小修飾符來定義,這個大小修飾符范圍為0到255,指定了要存儲的值的長度。
varchar類型:是char類型的變體,用於變長字符串,也也必須帶有一個范圍在0到255之間的大小指示器,區別在於MySQL處理這個指示器的方式:char把這個大小視為值的的准確大小,而varchar類型把它視為最大值並且只使用了存儲字符串實際上需要的字節數。所以如果不能確定字段要存儲多少個字符時,使用這種類型是一個很好的選擇。
對於比較長的字符串,MySQL提供了text和blob兩種類型,根據要存儲數據的大小,它們都有不同的子類型,用於存儲圖像,大的文本,聲音文件那樣的二進制數據。區別在於:blob類型區分大小寫,text類型不區分。
日期時間類型
MySQL用date和year類型描述簡單的日期值,使用time類型描述時間值。這些值可以描述為字符串或不帶分隔符的整數序列。如果描述為字符串,date類型的值應該使用連字號作為分隔符分隔開,而time類型的值應該使用冒號作為分隔符分隔開。year類型的值必須用4個數字存儲,MySQL會自動轉換:把00~69范圍內的值轉換到2000~2069范圍內,而把70~99范圍內的值抓換到1970~1999之內。如下例:
create table data(showtime time,birthday date,graduation year);
insert into data values('12:02:02','2000-02-02',2002),(120202,20000202,02);//結果是一樣的
除了日期和時間數據類型,MySQL還支持一種混合類型:datetime和timestamp數據類型,它們可以把日期和時間作為一個單值的組成成分來存儲。這兩種類型通常用於自動存儲包含當前日期和時間的時間戳,並且對執行大量數據庫事務和需要建立一個調試和審查用途的審計跟蹤的應用程序可以派上用場。
如果一個行中第一個字段語句為timestamp類型,而且這個字段沒有被明確指定值或被指定了一個null值, MySQL將會自動用當前日期和時間填充它。
使用MySQL的now()函數在語句為datetime類型的字段中填充當前的日期和時間可以得到相同的結果。
刪除data數據表,新建dta表,字段為'time1',類型為time, 字段為'time2',類型為date,添加數據time1值為'23:00:22',time2值為'19990303',查看結果
數據類型選擇
數據分類在使存儲數據更有一致性和提高效率和速度方面起了重要的作用。從而,當設計一個數據庫時對數據類型的選取不能掉以輕心,並且從MySQL可以使用的多組選項做出選擇之前,應該對所有涉及的問題做出充分考慮。
下面列出對MySQL選取數據類型需要牢記的幾個標准:
允許值,允許輸入一個字段中的值的范圍和類型是決定哪個數據類型加在這個字段上的最直接因素。
存儲效率,考慮字段可能的值的范圍並且根據這個范圍選取一個適當的、大小合適的數據類型也是很重要的,尤其是在處理數值類型的時候。
格式和顯示要求,影響字段類型選擇的另一個重要因素是存儲在字段內的數據的應用格式和顯示要求。
數據處理要求,數據類型的選擇還應該考慮數據操作和應用處理的要求,比如說某些類型更適合於加快數據操作而不是其他方面。
排序、索引和比較要求,如果想不同的標准對一列中所有的值進行排序,那麼我們需要選擇一種能夠有效地執行這些功能並且帶有最大限度的靈活性的類型。對相應字段添加索引,能夠加快檢索速度。比較的類型也應該使用的數據類型,需要保證使用的數據類型支持比較運算,並且相互兼容。