MySQL基本資料型別

蜡笔小新Belief發表於2024-08-22

FloatDouble

MySQL將四個位元組用於單精度值,並將八個位元組用於雙精度值。Float、DOUBLE型別代表近似數值。對於FLOAT,SQL標準允許對FLOAT括號中的關鍵字後面的位以精度(但不允許指數的範圍)進行可選的規範。由於浮點值是近似值而不是作為精確值儲存的,因此在比較中嘗試將它們視為精確值可能會導致問題。它們還受平臺或 實現依賴性的約束。如果需要表示的精確度很高時,如貨幣資料,最好使用decimal。

 

DECIMAL

DECIMAL以字串的形式儲存, 可能的最大取值範圍與 DOUBLE 相同,但是有效的取值範圍由 M 和 D 決定。DECIMAL(M,D)如果改變 M 而固定 D,則取值範圍將隨 M 的變大而變大。M的預設值為10,D的預設值是0.(精確的行為是特定於作業系統的,但是通常效果是將其截斷為允許的位數。)

例如 decimal(5,2),5是精度,2是小數位數。精度表示值儲存的有效位數,小數位數表示小數點後可以儲存的位數。所以可以表示為123.12

浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的範圍;但缺點是會引起精度問題。並且兩個浮點數進行減法和比較運算時也容易出問題,所以在使用浮點數時需要注意,並儘量避免做浮點數比較。

 

TIMESTAMP DATETIME

TIMESTAMP 與 DATETIME 除了儲存位元組和支援的範圍不同外,還有一個最大的區別是:DATETIME 在儲存日期資料時,按實際輸入的格式儲存,即輸入什麼就儲存什麼,與時區無關;而 TIMESTAMP 值的儲存是以 UTC(世界標準時間)格式儲存的,儲存時對當前時區進行轉換。

BINARY VARBINARY

BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。

在將資料轉換為二進位制資料時,SQL Server會對生成的二進位制資料進行填充或截斷。

當BINARY被儲存的值,它們被右側填充墊值到指定的長度。填充值為0x00(零位元組)。值在0x00插入時用右填充,不會刪除尾隨位元組以進行檢索。所有位元組在比較中都很重要,包括ORDER BY和DISTINCT操作。 0x00比較中,空間和空間有所不同,0x00先於空間進行 排序。

示例:對於BINARY(3)列, 在插入時'a '變為 'a \0'。 插入時'a\0'變為'a\0\0'。兩個插入的值均保持不變以進行檢索。

對於VARBINARY,沒有用於插入的填充,也沒有剝離任何位元組以進行檢索。所有位元組在比較中都很重要,包括ORDER BY和DISTINCT操作。 0x00比較中,空間和空間有所不同,0x00先於空間進行 排序。

對於那些刪除尾部填充位元組或比較將其忽略的情況,如果一列具有要求唯一值的索引,則將僅尾部填充位元組數不同的值插入該列會導致重複鍵錯誤。例如,如果表包含'a',則嘗試儲存'a\0'會導致重複鍵錯誤。

BLOB

BLOB 是一個二進位制大物件,可以容納可變數量的資料。有 4 種 BLOB 型別:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區別在於可容納儲存範圍不同。

 

相關文章