mysql中數據類型匯總


整型數據

image-20201112204331709

image-20201112203348336

以TINYINT為例(其他整型數據類似):

創建字段類型為TINYINT(1),則該字段可以取到的有符號整型最小值:-128最大值:127。-129和128都是越界值,插入時會報錯。

創建TINYINT(2)的字段,進行測試同樣取最小值:-128,最大值:127。由於TINYINT默認只占用1個字節,所以即使聲明為2個字節大小,也只能存儲一個字節的值。

PS:一個字節(bytes) = 八位(bits)。八位可以表示無符號整數:2^8 - 1 = 256 - 1 = 255,即表示 0-255 范圍的數字大小。

浮點和定點數據類型

浮點數分為兩種:單精度浮點類型(FLOAT)和雙精度浮點類型(DOUBLE)。

定點數類型為:DECIMAL

浮點數類型和定點數類型都可以用(M,N)來表示。其中,M稱為精度,表示總共的位數;N稱為標度,表示小數的位數。

image-20201112205427909

image-20201113111706088

FLOAT(5,3)為例:其值在數據庫中為55.0001,則在查詢時因為M精度的設置,只能顯示5位數字,因此該值會被四舍五入為:55.000,同理若為55.0006,則會四舍五入為55.001。

此外:FLOAT和DOUBLE存儲的是近似值,而DECIMAL存儲的是字符串,所以會不對數值進行四舍五入,因此精確度更高(例如:DECIMAL(5,3),其值設置為55.0001和55.0009都會顯示55.000)。

在定義商品價格之類的類型時,使用FLOAT足以。

日期與時間類型

image-20201113114313550

……

字符串類型

CHAR(M)VARCHAR(M)表示在創建表時指定的存儲字符串的最大長度為M。

CHAR類型是固定長度的。取值范圍為:0-255之間的任意值,設置成功后長度不變(即占用存儲空間大小被固定)

VARCHAR類型是變長的。取值范圍為:0-65535之間的任意值,設置最大值之后,其存儲空間根據字符串長度進行變化。例如:VARCHAR(10),但是只占用了5個字節的大小,因此該字段的空間只占用5+1個字節,最后一個字節位結束標識符。

對CHAR和VARCHAR的取值范圍進行測試,定義CHAR(5)和 VARCHAR(5)只能存儲一個字節大小的數據。

CHAR(5) 占用字節 VARCHAR(5) 占用字節
""(空字符串) 5 ""(空字符串) 1
"ab1" 5 "數字1" 4
"12345" 5 "12345" 6
"插入六個漢字" 越界禁止插入 "插入1234" 越界禁止插入

TEXT類型

TEXT類型是一種特殊的字符串類型,其中漢字占用3字節,數字字母占用1字節。包括:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

類型 允許的長度 存儲空間
TINYTEXT 0-255字節 值的長度+2個字節
TEXT 0-65535字節 值的長度+2個字節
MEDIUMTEXT 0-16772150字節 值的長度+3個字節
LONGTEXT 0-4294967295字節(2^32-1 = 4G) 值的長度+4個字節

PS:UTF-8對字符串編碼,一個漢字占用3個字節,一個字母和數字占用1個字節(mysql配置啟用UTF-8編碼)

TINYTEXT默認取值255不可更改大小,因此TINTEXT可以存儲255個英文字母,85個漢字。

其余類型可以取固定存儲長度。

ENUM類型

ENUM是一個字符串對象,其值為表創建時在列規定中枚舉的一列值。語法格式如下:

字段名 ENUM ('值1’,'值2',…… '值n')

其中,“字段名”指將要定義的字段,“值n”指枚舉列表中的第n個值。ENUM類型的字段在取值時,只能在指定的枚舉列表中取,而且一次只能取一個。創建的成員中有空格時,其尾部的空格將自動被刪除。ENUM值在內部用整數表示,並且每個枚舉值均有一個索引值:列表值所允許的成員值從1開始編號,MySQL存儲的就是這個索引編號。枚舉最多可以有65535個元素。
例如,定義ENUM類型的列(' first','second','third')該列可以取的值和每個值的索引如表5.7所示。

image-20201113142900598

SET類型

SET是一個字符串對象,可以有零或多個值。SET列最多可以有64個成員,其值為表創建時規定的一列值。指定包括多個SET成員的SET列值時,各成員之間用逗號()間隔開。語法格式如

SET ('值1','值2',……,'值n')

與ENUM類型相同,SET值在內部用整數表示,列表中每一個值都有一個索引編號。當創建表時,SET成員值的尾部空格將自動被刪除。

二進制數據類型

image-20201113143620877

BIT類型

BIT類型是位字段類型。M表示每個值的位數,范圍為1~64。如果M被省略,默認為1。如果為BIT(M)列分配的值的長度小於M位,就在值的左邊用0填充。例如,為BIT(6列分配一個值b'l01’,其效果與分配b'000101相同。BIT數據類型用來保存位字段值。例如,以二進制的形式保存數據13(13的二進制形式為1101),在這里需要位數至少為4位的BIT類型,即可以定義列類型為BIT(4),大於二進制1111的數據是不能插入BIT(4)類型的字段中的。

BINARY和 VARBINARY類型類

BINARY和 VARBINARY類型類似於CHAR和 VARCHAR,不同的是它們包含二進制字節字符串。其使用的語法格式如下:列名稱 BINARY(M)或者 VARBINARY(M)
BINARY類型的長度是固定的,指定長度之后,不足最大長度的,將在它們右邊填充“0’補齊以達到指定長度。例如:指定列數據類型為 BINARY(3),當插入a’時,存儲的內容實際為“a00”,當插入“ab”時,實際存儲的內容為“ab0”,不管存儲的內容是否達到指定的長度,其存儲空間均為指定的值M VARBINARY類型的長度是可變的,指定好長度之后,其長度可以在0到最大值之間。例如:指定列數據類型為 VARBINARY(20),如果插入的值的長度只有10,則實際存儲空間為10加1,即實際占用的空間為字符串的實際長度加1。

BLOB類型

BLOB列存儲的是二進制字符串(字節字符串),TEXT列存儲的是非二進制字符串(字符字符串)。BLOB列沒有字符集,並且排序和比較基於列值字節的數值;TEXT列有一個字符集,並且根據字符集對值進行排序和比較。

image-20201113143705426

BLOB列存儲的是二進制字符串(字節字符串),TEXT列存儲的是非二進制字符串(字符字符串)。BLOB列沒有字符集,並且排序和比較基於列值字節的數值;TEXT列有一個字符集,並且根據字符集對值進行排序和比較。

與ENUM類型不同的是,ENUM類型的字段只能從定義的列值中選擇一個值插入,而SET類型的列可從定義的列值中選擇多個字符的聯合。
如果插入SET字段中列值有重復,則 MySQL自動刪除重復的值;插入SET字段的值的順序並不重要,MySQL會在存入數據庫時按照定義的順序顯示;如果插入了不正確的值,默認情況下,MySQL將忽視這些值,並給出警告


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM