MySQL中數值類型中smallint、mediumint等區別是什麼

  • 2019 年 12 月 9 日
  • 筆記

MySQL 支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型

數值類型中又可以分為整型、浮點型,或者可以說為嚴格數值數據類型以及近似數值數據類型

分別為 tinyint(m)、smallint(m)、mediumint(m)、int(m)、bigint(m)、float(m,d)、double(m,d)、decimal(m,d)

位元組

1 bytes = 8 bit,1 個位元組最多可以代表的數據長度是 2 的 8 次方11111111,在計算機中也就是-128 到 127

65535

在開發中遇到了一個存進程 id 的字段,設置了一個 smallint unsigned 類型,結果出現了所有進程 id 都為 65535

這個值有點特殊,端口的最大值也為 65535

計算機是按照二進制儲存數據的,一般用 unsigned int 這種數據類型來儲存正整數 在計算機中,每個整數都是用 16 位 2 進制數來表示的,所以最大的數就是 16 個 1,也就是 11111111 11111111 把二進制數 11111111 11111111 轉化位十進制數就是 65535

區別

存儲範圍不同,分別為

smallint

說到了 65535,那就先說一下 smallint

2 個位元組,用於小的整數,帶符號的範圍是-32768 到 32767,無符號的範圍是 0 到 65535

我遇到的問題就是進程 id 超過 65535,入庫的時候都被壓為了 65535 導致

tinyint

1 個位元組,用於很小的整數,帶符號的範圍是-128 到 127,無符號的範圍是 0 到 255

mediumint

3 個位元組,用於中等大小的整數,帶符號的範圍是-8388608 到 8388607,無符號的範圍是 0 到 16777215

int

4 個位元組,用於普通大小的整數,帶符號的範圍是-2147483648 到 2147483647,無符號的範圍是 0 到 4294967295

bigint

8 個位元組,用於極大整數,帶符號的範圍是-9223372036854775808 到 9223372036854775807,無符號的範圍是 0 到 18446744073709551615

m 是什麼意思

比如經常用到的 int(11),這裡是 11 是什麼意思,只能存 11 位數嗎?當然不是

這個長度 11 並不代表允許存儲的寬度,而是為了告訴 MySQL 數據庫,我們這個字段的存儲的數據的寬度為 M 位數, 當然如果你不是 M 位數(只要在該類型的存儲範圍之內)MySQL 也能正常存儲

其他的數值類型中的 m 同理,int(1)和 int(11)中的 1 和 11 並不表示存儲長度,只有字段指定 zerofill 時有用

`tel` int(11) unsigned zerofill NOT NULL,

如果實際值是 1234567891,指定了 zerofill,查詢結果就是 01234567891,左邊用 0 來填充

沈唁志,一個PHPer的成長之路! 任何個人或團體,未經允許禁止轉載本文:《MySQL中數值類型中smallint、mediumint等區別是什麼》,謝謝合作!