程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL入門(三)——MySQL數據類型

MySQL入門(三)——MySQL數據類型

編輯:MySQL綜合教程

MySQL入門(三)——MySQL數據類型


MySQL的數據類型包括整數類型、浮點數類型、定點數類型、日期和時間類型、字符串類型和二進制數據類型。不同數據類型決定了數據的存儲格式、有效范圍和相應的限制。


1、整數類型

MySQL支持的整數類型如下表所示
這裡寫圖片描述
MySQL支持數據類型的名稱後面指定該類型的顯示寬度,基本形式如下:

數據類型(顯示寬度)

顯示寬度指能夠顯示的最大數據的長度。在不指定寬度的情況下,整數類型的默認顯示寬度與其有符號數的最大值的顯示寬度相同。如INT型為11,BIGINT型為20。
但實際上,即使出入的數據的寬度大於了設置的顯示寬度,但只要小於等於默認寬度,就可以正常完整的顯示出來。

2、浮點數類型和定點數類型

浮點數類型和定點數類型用來表示小數。包括以下類型
這裡寫圖片描述
其中,定點數類型的M指精度,是數據的總長度。小數點並不占位置,D為標度,指小數點後的長度。當插入數據的精度高於實際定義的精度時,系統會自動進行四捨五入處理。浮點數類型FLOAT和DOUBLE在四捨五入時不會報錯,但定點數類型DECIMAL會有警告。
當未指定精度時,DECIMAL型會默認整數位為10,小數位為0,即默認為整數。
由於定點數在MySQL中是以字符串形式存儲的,其精度比浮點數高,而且浮點數會出現誤差,在對數據精度要求高的情況下,選擇DECIMAL比較安全。

3、日期和時間類型

這裡寫圖片描述
當插入的數據值超過了該類型的取值范圍時,系統會報錯,並將相應的零值插入到數據庫中。

3.1 Year類型

向Year類型插入數據時可以直接用數字也可以用字符串,對於低於4位的會自動轉換,如輸入32,‘78’,3,‘2’會分別轉換為2032,1978,2003和2002。
注意‘0’和‘00’都會轉換為2000,而0會轉化為0000。

3.2 Time類型

Time類型的數據賦值方式如下
‘D HH:MM:SS’格式的字符串,或者’HHMMSS’格式的字符串或者HHMMSS格式的數值,其中D表示天數,取值范圍為0~34,保存時會自動將D轉換到HH處,如輸入‘2 11:32:21’會轉換為’59:32:21’,當然輸入不必嚴格遵守上述格式,系統會自動轉換,具體規則可以自己嘗試。如’2 20’,’2 20:20’,’30’和’345454’會轉換為’68:00:00’,’68:20:00’,’00:00:30’和’34:54:54’。即基本符合從左向右分配。
當HH和SS的賦值大於60時,即此值無效,系統會報錯,並將其轉換為00:00:00。在輸入數據合法但超出Time值范圍時,會被裁為范圍內最接近的端點,如’880:00:00’會轉換為’838:59:59’。
可以適用CURRENT_TIME和NOW()出入當前系統時間。

3.3 DATE類型

可以適用’YYYY-MM-DD’或’YYYYMMDD’格式的字符串、’YY-MM-DD’或’YYMMDD’格式的字符串、YYYYMMDD或YYMMDD格式的數字表示。
同樣可以使用CURRENT_DATE或者NOW()來輸入當前系統日期。

3.4 DATETIME類型

DATATIME類型相當於DATE類型和TIME類型的組合。
當某字段的數據類型為DATETIME時,使用NOW()可以輸入當前系統日期和時間。

3.5 TIMESTAMP類型

與DATETIME類型相同點:
- 顯示格式相同
- 復制方法相同
- 用NOW()轉為換系統當前時間
與DATETIME類型不同點:
- 比DATETIME類型范圍小
- 使用CURRENT_TIMESTAMP來輸入系統當前日期和時間
- 輸入NULL或無任何輸入時,系統自動輸入系統當前日期和時間
- 該類型能夠根據不同的地區的時區來轉換時間

4、字符串類型

字符串類型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。

4.1 CHAR和VARCHAR類型

兩者都是在創建表時就指定了最大長度,基本形式如下

字符串類型(M)

注意CHAR類型的長度是固定的,永遠是指定的M,其值可以是0~255的任意值。
而VARCHAR類型的長度是可變的,創建時指定的M只是最大長度,可以取0~65535之間任意值。即在最大值M范圍內使用多少分配多少,實際占用空間為字符串的實際長度加1,此1為字符串的結束標志符。因此會保存輸入字符串最後的空格,而前者不會。
這裡寫圖片描述
當出入的字符串長度大於可插入最大值時,系統會阻止插入並報錯。
雖然VARCHAR比CHAR占用空間小、更靈活,但處理速度卻比不上CHAR型,所以對於長度變化不大和查詢速度要求較高的字符串類型,最好還是選擇CHAR類型。

4.2 TEXT類型

TEXT類型只能保存字符數據,具體分類有
這裡寫圖片描述

4.3 ENUM類型

ENUM類型又稱為枚舉類型。在創建表時,其取值范圍就以列表的形式制定了。基本形式如下

屬性名 ENUM(‘值1’, ‘值2’, ···,’值n’)

其中,屬性名指字段的名稱,’值n’表示列表中的第n個值,這些值末尾的空格都會被系統直接刪除。
ENUM類型的值只能取列表中的一個元素。取值列表中最多可以有65535個值。列表中的每個值都有一個順序排列的編號,MySQL中存儲的是這個編號而非列表中的具體值。

4.4 SET類型

一般來說,如果只能選取列表中的一個值,就選擇ENUM類型,如果需要選取列表中的多個值的組合,則需要選擇SET類型。
同樣,在創建表時,其取值范圍就以列表的形式制定了。基本形式如下

屬性名 SET(‘值1’, ‘值2’, ···,’值n’)

具體同ENUM類型。
在取多個元素時,不同元素之間用逗號隔開,SET類型的值最多只能是有64個元素構成的集合。同ENUM,存儲的是編號而非具體值。
插入記錄時,SET字段中的元素順序無關緊要,系統會自動按照定義時的順序顯示。
如SET類型的取值類表為(‘A’,’B’,’C’,’D’,’E’),插入值為(‘B’)和(‘C,B,D’)時,結果顯示為(B)和(B,C,D)。

5、二進制類型

這裡寫圖片描述

5.1 BINARY和VARBINARY類型

類似於CHAR和VARCHAR類型的關系和使用方法。
對於CHAR來說,不足最大長度的空間用“\0”補全。

5.2 BIT類型

BIT類型也是在創建表時指定了最大長度,基本形式為

BIT(M)

如字段的類型為BIT(4),則存儲的數據是從0~15。
在查詢BIT類型的數據時,要用BIN(字段名+0)來將值轉換為二進制顯示。

5.3 BLOB類型

此為一種特殊的二進制類型,可以用來保存數據量很大的二進制數據,如圖片等。包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
BLOB類型主要用來存儲圖片、PDF文檔等二進制文件。通常來說,可以將這些文件存儲在文件系統中,然後在數據庫中存儲這些文件的路徑,這種方式比直接存儲在數據庫中簡單,當然訪問速度也會慢一些。

6、選擇數據類型

在MySQL中創建表時需要考慮為字段選擇哪種數據類型最合適。基本注意事項可以參考上述總結。
下面是一些常見問題

6.1 可以存儲路徑的數據類型

這裡寫圖片描述

6.2 BOOL類型

這裡寫圖片描述

6.3 JPG和MP3等格式的儲存

這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved