柚子快報激活碼778899分享:筆記 MySQL 的數(shù)據(jù)類型
1.整數(shù)類型
1.1 tinyint
tinyint 為小整數(shù)類型,存儲空間為1個字節(jié)(8位),有符號范圍-128 ~ 127,無符號范圍 0 ~ 255,此類型通常在數(shù)據(jù)庫中表示類型的字段,如某一字段 type 表示學科,其中 “type=1” 表示語文,“type=2” 表示數(shù)學, “type=3” 表示英語,此時 type 字段即可使用 tinyint 這種存儲空間比較小的類型。
1.2 smallint
smallint 為小整數(shù)類型,存儲空間2個字節(jié)(16位),有符號范圍 -32768 ~ 32767,無符號范圍 0 ~ 65535,當遇到最大值不超過 65535 的整數(shù)類型字段時,可使用無符號 smallint 類型。
1.3 mediumint
mediumint 為中整數(shù)類型,存儲空間3個字節(jié)(24位),有符號范圍 -8388608 ~ 8388607,符號范圍 0 ~ 16777215,當遇到最大值不超過 16777215 的整數(shù)類型字段時,可使用無符號 mediumint 類型。
1.4 int
int 為整數(shù)類型,存儲空間 4 個字節(jié) ( 32位 ),有符號范圍 -2147483648 ~ 2147483647,無符號范圍 0 ~ 49294967295,當遇到最大值不超過 49294967295 的整數(shù)類型字段時,可使用無符號 int 類型,通常自增主鍵 id 使用 int 類型。
1.5 bigint
bigint 為大整數(shù)類型,存儲空間8個字節(jié)(64位),有符號范圍 -9223372036854775808 ~ 9223372036854775807,無符號范圍 0 ~ 18446744073709551615,當遇到最大值不超過 18446744073709551615 的整數(shù)類型字段時,可使用無符號 bigint 類型,通常自增主鍵 id 使用 int 無法滿足時,可以使用 bigint 類型。
2.浮點類型
2.1 float
float 為單精度浮點類型,存儲空間 4 個字節(jié),支使用標準的浮點運算進行近似計算,若想知道浮點運算是怎么計算的,則需要研究操作系統(tǒng)的浮點數(shù)方式,通常對小數(shù)精度要求不那么高的字段可使用 float 類型。
2.2 double
double 為雙精度浮點類型,存儲空間 8個字節(jié),相比float 有更高精度和更大的范圍,通常對小數(shù)精度要求不那么高,但比 float 要求更高的字段可使用 double 類型。
2.3 decimal
decimal 類型用于存儲精確的小數(shù),若使用 float 類型來取代一些需要精確小數(shù)點類型的字段時,大的數(shù)據(jù)量會導致數(shù)據(jù)錯誤,比如金額,若使用 float 類型,可能會丟失精度,此時對于金額這樣對精度要求很高的字段來說,可以選擇使用 decimal 類型。
3日期和時間類型
3.1 date
date 類型為日期類型,存儲空間 3個字節(jié),格式為 “YYYY-MM-DD”,例如 “2020-03-16”,日期的范圍 “1000-01-01 ~ 9999-12-31”,通常只想用來存儲如 “2020-02-02” 這種格式的日期字段時,可以選擇使用 date 類型。
3.2 time
time 類型為時間類型,存儲空間 3 ~ 6個字節(jié),格式為 “HH::MM:SS[.微秒]” ,例如 “04:31:22.33”,范圍 “-838:59:59 ~ 838:59:59”,通常只想用來存儲如 “04:31:22.33” 這種格式的時間字段時,可以選擇使用 time 類型。
3.3 year
year 類型為日期類型,存儲空間 1 個字節(jié) ,例如 “2020”,范圍 “1901 ~ 2155”,通常只想用來存儲如 “2020” 這種格式的日期字段時,可以選擇使用 year 類型。
3.4 datetime
datetime 類型為精確時間的日期類型,存儲空間為 5 ~ 8 個字節(jié),格式為 “YYYY-MM-DD HH:MM:SS[.微秒值]”,例如 “2020-02-02 02:02:02.02”,范圍 “1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC”,通常只想用來存儲如 “2020-02-02 02:02:02.02” 這種格式的日期字段時,可以選擇使用 datetime 類型。
3.5 timestamp
timestamp 類型保存了從1970年01月01日午夜以來的秒數(shù),它和 UNIX 時間戳相同,存儲空間 4 ~ 7 個字節(jié),范圍 “1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC”,timestamp 顯示的值依賴于時區(qū),和 datetime 相比,前者提供的值與時區(qū)有關系,后者則保留文本表示的日期和時間。
4.字符串類型
4.1 char
char 類型為定長字符串類型,適合存儲很短的字符串,或者所有值都接近同一個長度,例如存儲密碼 md5 值,因為它是一個定長的值,對于經(jīng)常變更的數(shù)據(jù),char 比 varchar 更好,因為定長的 char 不容易產(chǎn)生碎片。
4.2 varchar
varchar 類型用于存儲可變長度字符串,是最常見的字符串數(shù)據(jù)類型,對于短長度的字符串,它比定長的更為節(jié)省空間,varchar 節(jié)省空間對性能有幫助,varchar 類型的字符串有如下特點 :
字符串列的最大長度比平均長度大; 列的更新少,碎片問題較?。?使用了如 “UTF-8” 字符集,每個字符都使用不同的字節(jié)數(shù)來存儲。 4.3 text
text 數(shù)據(jù)類型家族包括 : tinytext、text、mediumtext、longtext。 MySQL 把每個 text 值當做一個獨立的對象處理。若 text 家族的值太大時,InnoDB 存儲引擎會額外使用存儲區(qū)域來進行存儲,通常存儲文章這樣比較長的內(nèi)容字段時,可選擇 text 家族類型。
5.枚舉值類型
5.1 enum
enum 類型為枚舉值類型,有時可以使用枚舉值替代字符串,枚舉列可以把一些不重復的字符串存儲為一個預定義的集合。 MySQL 在存儲枚舉時非常緊湊,會根據(jù)列表值的數(shù)量壓縮到 1 ~ 2 個字節(jié),例如 ENUM (‘黃色’,‘黑色’,‘藍色’,‘紫色’),枚舉值類型字段的需求也可以使用 tinyint 類型來替代。
6.二進制類型
6.1 blob
blob 數(shù)據(jù)類型家族包括 :tinybob、blob、mediumblob、longblob。和 text 家族一樣,MySQL 把每個 text 值當做一個獨立的對象處理。若 blob 家族的值太大時,InnoDB 存儲引擎會額外使用存儲區(qū)域來進行存儲,blob 類型存儲的是二進制數(shù)據(jù),沒有排序規(guī)則或字符集。
7.小結(jié)
MySQL 數(shù)值類型大小和取值范圍,實際應用中要根據(jù)字段在業(yè)務中實際表示的含義來選擇數(shù)值字段數(shù)據(jù)類型,例如年齡字段 age 選擇無符號 TINYINT 類型,金額數(shù)值對精度要求比較高,所以選擇 DECIMAL 類型比較合適,時間戳類型使用 INT,對于數(shù)據(jù)量比較大的表的自增主鍵 id 可選擇 BIGINT,具體字段類型的選擇,還需要根據(jù)實際情況來綜合分析,合理選擇即可,字段的默認值盡量避免 NULL。MySQL 日期時間類型和字符串類型,需要注意的是時間類型 TIME、DATETIME、TIMESTAMP 存儲大小具體取決于微秒值,例如 TIME 類型,當微秒不存在的時候如 “12:12:12” 字節(jié)數(shù)為 3 字節(jié)(微秒 0 字節(jié))"12:12:12.72"表示微秒 2 位,總共4字節(jié)(微秒1字節(jié)),“12:12:12.6173” 表示微秒 4 位,總共 5 字節(jié)(微秒2字節(jié)),“12:12:12.627127” 表示微秒 6 位,總共 6 字節(jié),微秒字節(jié)位數(shù)對表如下:
柚子快報激活碼778899分享:筆記 MySQL 的數(shù)據(jù)類型
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。