2.4 常用數據類型
在創建數據表時,除了需要創建數據表的表名、列名之外,還需要為數據表中的每一列選擇合適的數據類型。在數據庫中,常用的數據類型包括整數類型、浮點類型、數值類型、日期與時間類型、字符類型、二進制類型等。不同的數據庫中,數據類型的定義也不完全相同。這一節就以Oracle數據庫、MySQL數據庫和Microsoft SQL Server數據庫為例,介紹在這3種數據庫中,常用的數據類型定義及其使用方法。
2.4.1 整數類型與浮點類型
整數類型的數據可以是正整數,也可以是負整數。在MySQL數據庫中主要整數類型及其取值范圍如表2.1所示。
表2.1 MySQL中主要整數類型及其取值范圍

在MySQL數據庫中,這些整數類型還可以帶一個參數用來表示數據最大的顯示寬度。例如INT(4)表示顯示數據列的列寬度為4。使用參數并不影響整數類型的取值范圍。這個參數是可選的。
在MySQL數據庫中,浮點類型主要包括FLOAT和DOUBLE。其中,FLOAT表示單精度浮點數, DOUBLE表示雙精度浮點數。浮點數類型及其取值范圍如表2.2所示。
表2.2 MySQL中浮點數類型及其取值范圍

在MySQL數據庫中,這些浮點數類型還可以包括兩個參數。其中,參數m表示存儲數據的有效數字的位數;參數n表示小數點后的位數。例如FLOAT(5,2),第一個參數5表示顯示的數字總位數為5,第二個參數表示小數點后的數字個數。如果把數據122.456插入到定義為FLOAT(5,2)的數據列中,則實際放入到該列的數據為122.46。
可以看到,MySQL數據庫中數字在使用參數進行插入時會對插入的數據進行四舍五入的操作。浮點數類型中這兩個參數也是可選的。
在Microsoft SQL Server數據庫中,也可以使用TINYINT、SMALLINT、INT和BIGINT存儲整型數據,其取值范圍與表2.1中TINYINT、SMALLINT、INT和BIGINT類型的取值范圍相同。
浮點類型數據可以定義為REAL類型和FLOAT類型。其中,REAL類型占用4個字節的存儲空間,可以精確到小數點后7位,其取值范圍為-2.4E38~2.4E38;FLOAT類型占用8個字節的存儲空間,可以精確到小數點后15位,其取值范圍為-2.7E308~2.7E308。
2.4.2 數值類型
在Oracle數據庫中。可以使用NUMBER(m,n)來定義數字類型的數據。其中,參數m表示存儲數據的有效數字的位數;參數n表示小數點后的位數。例如NUMBER(5,2),第一個參數5表示顯示的數字總位數為5,第二個參數表示小數點后的數字個數。如果把數據122.456插入到定義為NUMBER(5,2)的數據列中,則實際放入到該列的數據為122.46。
2.4.3 字符類型
在數據庫中,字符類型是用來存儲字符串值的。不同的數據庫,字符類型的定義也不完全相同,下面以Oracle數據庫、MySQL數據庫以及Microsoft SQL Server數據庫為例,介紹在這3種數據庫中字符類型不同的定義方法。
1. Oracle數據庫
Oracle數據庫中可以使用CHAR或者是VARCHAR2兩種形式定義字符數據。其中,CHAR用來定義定長字符串,VARCHAR2用來定義可變長字符串。字符類型及其意義如表2.3所示。
表2.3 Oracle數據庫中字符類型及其意義

? 如果不指定n的長度,默認值為1個字節的長度。
? 如果在定義為字符類型的列中存儲漢字,則一個漢字占兩個字節。
? 對于VARCHAR2類型,如果實際存儲的字符長度比參數n所設定的長度小,則Oracle數據庫會將其長度自動調節到與該字符的實際長度相同。如果存儲的字符串前后存在空格,則Oracle數據庫會自動將空格刪除。
? 如果要存儲大量的字符信息,建議使用CLOB類型。
例如,CHAR(200)表示定義的數據列中最多可以存放字符串的大小為200個字節。VARCHAR2 (200 CHAR)表示定義的數據列中最多可以存放200個字符。
注意 使用CHAR定義的列存儲的字符串所占空間是不可變的,使用VARCHAR2定義的列存儲的字符串所占空間是可變的。
2. MySQL數據庫
MySQL數據庫中可以使用CHAR、VARCHAR、TEXT等形式定義字符數據。其中,CHAR用來定義定長字符數據,VARCHAR和TEXT用來定義可變長字符數據。字符類型及其意義如表2.4所示。
表2.4 MySQL數據庫中字符類型及其意義

?CHAR(n)和VARCHAR(n)在定義字符類型時需要指定長度,而TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT在定義字符類型時不需要為其指定長度。
?如果在定義為字符類型的列中存儲漢字,則一個漢字占兩個字節。
3. Microsoft SQL Server數據庫
Microsoft SQL Server數據庫中,可以使用CHAR、VARCHAR、TEXT等形式定義字符數據。其中, CHAR用來定義定長字符數據,VARCHAR和TEXT用來定義可變長字符數據。如果字符數據超過了8KB,可以使用TEXT數據類型進行存儲。
2.4.4 日期與時間類型
在數據庫中,日期與時間類型是用來存儲日期和時間值的。不同的數據庫,日期與時間類型的定義也不完全相同,下面以Oracle數據庫、MySQL數據庫以及Microsoft SQL Server數據庫為例,介紹在這3種數據庫中日期與時間類型不同的定義方法。
1. Oracle數據庫
在Oracle數據庫中可以使用DATE、TIMESTAMP等形式定義日期時間類型的數據。其中DATE類型的數據在英文版本中日期默認的格式為DD-MON-YY的形式。例如10-SEP-09;在中文版本中的默認格式為日-月-年,如10-9月-09;TIMESTAMP類型在英文版中的默認的格式為YYYY-MM-DD HH.MM.SS.AM如10-SEP-09 12.22.000000PM。在中文版本中的默認日期格式為‘日-月-年時、分、秒’,例如, 09-8月1018.12.22.000000下午。它除了包含時、分、秒之外,還包含了秒的小數部分。秒值精確到小數點后6位。
2. MySQL數據庫
在MySQL數據庫中,可以使用DATE、TIME、DATETIME等形式定義日期時間類型。其中, DATE類型的數據默認格式為YYYY-MM-DD,例如,2009-08-10;TIME類型的數據默認格式為HH:MM:SS,例如,18:13:23;DATETIME類型的數據默認格式為YYYY-MM-DD HH:MM:SS,例如, 2009-08-10 18:13:23。
3. Microsoft SQL Server數據庫
在Microsoft SQL Server數據庫中,可以使用DATETIME、SMALLDATETIME兩種形式定義日期時間類型。其中,DATETIME類型需要8個字節的存儲空間,其日期的取值范圍從1753年1月1日到9999年12月31日,時間部分可以精確到2.33毫秒;SMALLDATETIME類型需要4個字節的存儲空間,其日期的取值范圍從1900年1月1日到2079年6月6日,時間部分可以精確到分鐘。SMALLDATETIME類型的精確度沒有DATETIME類型的精確度高。
在SQL Server 2008中,增加了四種DATETIME類型的數據,分別為DATE、TIME、DATETIMEOFFSET和DATETIME2。其中DATE類型只用來存儲日期,其取值范圍為0001-01-01~9999-12-31;TIME類型只用來存儲時間,其取值范圍為00:00:00.0000000~23:59:59.9999999;DATETIMEOFFSET類型保證了存儲的日期和時間的時區一致性;DATETIME2是對DATETIME的擴展,其取值范圍要比DATETIME的取值范圍大,并可以通過參數設定小數的位數,最多可以精確到小數點后7位。
2.4.5 二進制類型
在數據庫中,二進制類型是用來存儲二進制數據的。不同的數據庫,二進制類型的定義也不完全相同,在Oracle數據庫中可以使用BLOB存儲二進制數據信息,最多可以存儲4GB。
在MySQL數據庫中除了可以使用BLOB存儲二進制的數據以外,還可以使用TINYBLOB、MEDIUMBLOB、LONGBLOB等存儲二進制類型的數據。在Microsoft SQL Server數據庫中,可以使用BINARY、VARBINARY和IMAGE存儲二進制數據信息。其中,在IMAGE數據類型中存儲的數據是以位字符串存儲的,它不是通過Microsoft SQL Server解釋的,而是需要通過應用程序來解釋。
- 企業數字化創新引擎:企業級PaaS平臺HZERO
- Word 2010中文版完全自學手冊
- 從0到1:數據分析師養成寶典
- Voice Application Development for Android
- Python數據分析、挖掘與可視化從入門到精通
- 區塊鏈通俗讀本
- Learn Unity ML-Agents:Fundamentals of Unity Machine Learning
- MySQL 8.x從入門到精通(視頻教學版)
- The Game Jam Survival Guide
- Instant Autodesk AutoCAD 2014 Customization with .NET
- 探索新型智庫發展之路:藍迪國際智庫報告·2015(上冊)
- Hadoop 3實戰指南
- 企業主數據管理實務
- 數據應用工程:方法論與實踐
- 大數據技術體系詳解:原理、架構與實踐