MySQL-數據類型

1、MySQL數據類型

一、整數類型:5種
包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
須要考慮存儲空間和數據可靠性平衡的問題
image.pngsql

二、浮點數和定點數類型
浮點數類型包括FLOAT、DOUBLE、REAL不精確spa

  • FLOAT 表示單精度浮點數;
  • DOUBLE 表示雙精度浮點數;
  • REAL 默認就是 DOUBLE。若是你把 SQL 模式設定爲啓用「REAL_AS_FLOAT」,那麼,MySQL 就認爲 REAL 是 FLOAT。若是要啓用「REAL_AS_FLOAT」,就能夠經過如下 SQL 語句實現:
SET sql_mode = 「REAL_AS_FLOAT」;

其中FLOAT佔用字節數少,取值範圍小,DOUBLE佔用字節多,取值範圍大;
image.pngcode

定點數類型(DECIMAL),是精確的數據類型
1.它是把十進制數的整數部分和小數部分拆開,分別轉換成十六進制數,進行存儲。這樣,全部的數值,就均可以精準表達了,不會存在由於沒法表達而損失精度的問題。
2.MySQL 用 DECIMAL(M,D)的方式表示高精度小數。其中,M 表示整數部分加小數部分,一共有多少位,M<=65。D 表示小數部分位數,D對象

簡單小結浮點數和定點數的特色:浮點類型取值範圍大,可是不精準,適用於須要取值範圍大,又能夠容忍微小偏差的科學計算場景(好比計算化學、分子建模、流體動力學等);定點數類型取值範圍相對小,可是精準,沒有偏差,適合於對精度要求極高的場景(好比涉及金額計算的場景)。blog

三、文本類型
包括TEXT、CHAR、VARCHAR、ENUM、SET,區別以下:字符串

  • CHAR(M):固定長度字符串。CHAR(M) 類型必須預先定義字符串長度。若是過短,數據可能會超出範圍;若是太長,又浪費存儲空間;
  • VARCHAR(M): 可變長度字符串。VARCHAR(M) 也須要預先知道字符串的最大長度,不過只要不超過這個最大長度,具體存儲的時候,是按照實際字符串長度存儲的;
  • TEXT:字符串。系統自動按照實際長度存儲,不須要預先定義長度;
  • ENUM: 枚舉類型,取值必須是預先設定的一組字符串值範圍以內的一個,必需要知道字符串全部可能的取值;
  • SET:是一個字符串對象,取值必須是在預先設定的字符串值範圍以內的 0 個或多個,也必須知道字符串全部可能的取值。

其中TEXT 類型也有 4 種,它們的區別就是最大長度不一樣:it

  • TINYTEXT:255 字符(這裏假設字符是 ASCII 碼,一個字符佔用一個字節,下同);
  • TEXT: 65535 字符;
  • MEDIUMTEXT:16777215 字符;
  • LONGTEXT: 4294967295 字符(至關於 4GB)。

注意:
1.TEXT 也有一個問題:因爲實際存儲的長度不肯定,MySQL 不容許 TEXT 類型的字段作主鍵,遇到這種狀況,你只能採用 CHAR(M),或者 VARCHAR(M)。
2.在項目中,只要不是主鍵字段,就能夠按照數據可能的最大長度,選擇這幾種 TEXT 類型中的的一種,做爲存儲字符串的數據類型。class

四、日期與時間類型
包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP
1.用得最多的日期時間類型是 DATETIME,由於雖然DATETIME 類型佔用的存儲空間最多,可是它表達的時間最爲完整,取值範圍也最大。
image.png效率

關於MySQL定義表字段類型時的建議:數據類型

  • 整數:INT
  • 小數:DECIMAL
  • 字符串:TEXT
  • 日期與時間:DATETIME

不過,凡事都是有兩面的,可靠性好,並不意味着高效,好比,TEXT 雖然使用方便,可是效率不如 CHAR(M) 和 VARCHAR(M)。

相關文章
相關標籤/搜索