在 MySQL 的數值類型體系中,TINYINT 佔用 1 個字節(8 位元)的存儲空間。根據是否帶符號,其取值範圍存在顯著差異:
這些數值並非隨意設定,而是基於二進制位運算的基本原理推導而來。參考 MySQL 5.1 官方參考手冊。
無符號情況下,所有 8 位元均用於表示數值大小:
00000000 → 十進制 011111111 → 十進制 255這部分邏輯直觀易懂,無需複雜轉換。
帶符號整數在計算機中採用補碼表示法,最高位作為符號位(0 表正,1 表負)。若按原碼邏輯推算:
01111111 = +12711111111 = -127(原碼邏輯)但實際最小值卻是 -128,這背後涉及補碼體系的精妙設計。
在補碼體系中,「-0」與「+0」的補碼表示不同,會導致兩個編碼對應同一數值(0)的浪費。為實現編碼與數值一一映射,規定 0 唯一用「+0」表示(00000000)。
原本對應「-0」的編碼 10000000 便被「人為規定」代表 -128,從而充分利用所有 256 種編碼組合。這就是帶符號 TINYINT 範圍為 -128~127 的根本原因。
理解補碼機制不僅能釐清 TINYINT 範圍由來,更是掌握計算機整數存儲本質的關鍵。MySQL 遵循此標準,確保存儲效率與數值表示的完備性。