1. 程式人生 > Mysql入門教學 >10 MySQL 的資料型別(1)

10 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。