Mysql基本數據類型

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。它們區別在於可容納存儲範圍不同。同樣TEXT也有四種類型: TINYTEXT,TEXT, MEDIUMTEXT,和LONGTEXT。這些對應於四種BLOB類型,並且具有相同的最大長度和存儲要求。

  BLOB值被視爲二進制字符串(字節字符串)。它們具有binary 字符集和排序規則,並且比較和排序基於列值中字節的數字值。 TEXT值被視爲非二進制字符串(字符字符串)。它們具有 binary以外的字符集,並且根據字符集的排序規則對值進行排序和比較。

  在大多數情況下可以將BLOB列看做VARBINARY,相似的,可以將TEXT列視爲VARCHAR。但是BLOB、TEXT與VARBINARY、VARCHAR的不同在於:

  • 對於BLOB和TEXT的索引列,必須指定索引前綴長度。但對於CHAR和VARCHAR,前綴長度是可選的。

  • BLOB和TEXT列不能有DEFAULT值。

  MySQL Connector / ODBC將BLOB值定義爲 LONGVARBINARY,將TEXT 值定義爲LONGVARCHAR。

  由於BLOBandTEXT 值可能非常長,因此在使用它們時可能會遇到一些限制:

  使用臨時表處理的查詢結果中的 實例BLOB或 TEXT列會導致服務器在磁盤而不是內存中使用表,因爲 MEMORY存儲引擎不支持這些數據類型。使用磁盤會導致性能下降,因此僅在確實需要時在查詢結果中包含 BLOB或TEXT列。例如,避免使用 SELECT *選擇所有列的。

SET和ENUM

  ENUM 是一個字符串對象,值爲表創建時列規定中枚舉的一列值。

  SET 是一個字符串的對象,可以有零或多個值,SET 列最多可以有 64 個成員,值爲表創建時規定的一列值。指定包括多個 SET 成員的 SET 列值時,各成員之間用逗號,隔開。如果插入 SET 字段中的列值有重複,則 MySQL 自動刪除重複的值;插入 SET 字段的值的順序並不重要,MySQL 會在存入數據庫時,按照定義的順序顯示;如果插入了不正確的值,默認情況下,MySQL 將忽視這些值,給出警告。

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

  但與 ENUM 類型不同的是,ENUM 類型的字段只能從定義的列值中選擇一個值插入,而 SET 類型的列可從定義的列值中選擇多個字符的聯合。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章