MySQL 的數據類型(1)
本小節主要講解 MySQL 數據類型,MySQL 支持多種數據類型,學習好數據類型,才能更好的學習 MySQL 表的設計,讓表的設計更加合理。
1.整數類型
類型 | 大小 | SIGNED(有符號) | UNSIGNED(無符號) | 說明 |
---|---|---|---|---|
tinyint | 1字節 | -128~127 | 0~255 | 小整型 |
smallint | 2字節 | -32768~32767 | 0~65535 | 小整型 |
mediumint | 3字節 | -8388608~8388607 | 0~16777215 | 中整型 |
int | 4字節 | -2147483648~2147483647 | 0~49294967295 | 整型 |
bigint | 8字節 | -9223372036854775808 ~ 9223372036854775807 |
0~18446744073709551615 | 大整型 |
1.1 tinyint
tinyint 為小整數類型,存儲空間為1個字節(8位),有符號范圍-128 ~ 127,無符號范圍 0 ~ 255,此類型通常在數據庫中表示類型的字段,如某一字段 type 表示學科,其中 “type=1” 表示語文,“type=2” 表示數學, “type=3” 表示英語,此時 type 字段即可使用 tinyint 這種存儲空間比較小的類型。
1.2 smallint
smallint 為小整數類型,存儲空間2個字節(16位),有符號范圍 -32768 ~ 32767,無符號范圍 0 ~ 65535,當遇到最大值不超過 65535 的整數類型字段時,可使用無符號 smallint 類型。
1.3 mediumint
mediumint 為中整數類型,存儲空間3個字節(24位),有符號范圍 -8388608 ~ 8388607,符號范圍 0 ~ 16777215,當遇到最大值不超過 16777215 的整數類型字段時,可使用無符號 mediumint 類型。
1.4 int
int 為整數類型,存儲空間 4 個字節 ( 32位 ),有符號范圍 -2147483648 ~ 2147483647,無符號范圍 0 ~ 49294967295,當遇到最大值不超過 49294967295 的整數類型字段時,可使用無符號 int 類型,通常自增主鍵 id 使用 int 類型。
1.5 bigint
bigint 為大整數類型,存儲空間8個字節(64位),有符號范圍 -9223372036854775808 ~ 9223372036854775807,無符號范圍 0 ~ 18446744073709551615,當遇到最大值不超過 18446744073709551615 的整數類型字段時,可使用無符號 bigint 類型,通常自增主鍵 id 使用 int 無法滿足時,可以使用 bigint 類型。
2.浮點類型
類型 | 大小 | SIGNED(有符號) | UNSIGNED(無符號) | 說明 |
---|---|---|---|---|
float | 4字節 | -3.402823466E+38 ~ -1.175494351E-38, 0, 1.175494351E-38 ~ 3.402823466351E+38 |
0,1.175494351E-38 ~ 3.402 823 466 E+38 | 單精度浮點型 |
double | 8字節 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308, 0, 2.2250738585072014E-308 ~ 1.7976931348623157E+308 |
0, 2.2250738585072014E-308 ~ 1.797693134862315 7E+308 |
雙精度浮點型 |
decimal | 每4個字節存儲9個數字,小數點占1字節 | DECIMAL(M,D),取決于M和D,M是整數部分,D是小數部分 | DECIMAL(M,D),取決于M和D,M是整數部分,D是小數部分 | 精確類型,常用來表示金額 |
2.1 float
float 為單精度浮點類型,存儲空間 4 個字節,支使用標準的浮點運算進行近似計算,若想知道浮點運算是怎么計算的,則需要研究操作系統的浮點數方式,通常對小數精度要求不那么高的字段可使用 float 類型。
2.2 double
double 為雙精度浮點類型,存儲空間 8個字節,相比float 有更高精度和更大的范圍,通常對小數精度要求不那么高,但比 float 要求更高的字段可使用 double 類型。
2.3 decimal
decimal 類型用于存儲精確的小數,若使用 float 類型來取代一些需要精確小數點類型的字段時,大的數據量會導致數據錯誤,比如金額,若使用 float 類型,可能會丟失精度,此時對于金額這樣對精度要求很高的字段來說,可以選擇使用 decimal 類型。
3.小結
本小節主要介紹了 MySQL 數值類型大小和取值范圍,實際應用中要根據字段在業務中實際表示的含義來選擇數值字段數據類型,例如年齡字段 age 選擇無符號 TINYINT 類型,金額數值對精度要求比較高,所以選擇 DECIMAL 類型比較合適,時間戳類型使用 INT,對于數據量比較大的表的自增主鍵 id 可選擇 BIGINT,具體字段類型的選擇,還需要根據實際情況來綜合分析,合理選擇即可,字段的默認值盡量避免 NULL。