1. MySQL的TINYINT是什麼?
在MySQL中,TINYINT
是一種用來儲存非常小的整數的資料型別。TINYINT
佔用1位元組(8位元)的記憶體,有符號時範圍是-128
到127
,無符號時則是0
到255
。TINYINT主要用於高效管理小數值或布林值。
TINYINT的特點
- 記憶體效率:由於
TINYINT
僅佔1位元組,相較於其他整數型別(例如:INT
或BIGINT
),可以節省更多記憶體。 - 有符號與無符號:有符號情況下可處理負數,而使用無符號則能擴大正數的範圍。
TINYINT的使用範例
以下範例建立了一個使用TINYINT
型別來管理小數值與旗標的資料表:
CREATE TABLE user_status (
user_id INT PRIMARY KEY,
is_active TINYINT(1) NOT NULL DEFAULT 0
);
在這個例子中,is_active
欄位被定義為TINYINT(1)
,用於管理使用者是否啟用。0表示「未啟用」,1表示「啟用」。
2. TINYINT的應用場景
TINYINT
非常適合管理小整數或布林值,尤其在需要最佳化資料庫效能與節省儲存空間時被廣泛使用。
作為布林值(Boolean)的使用
由於MySQL沒有專門的BOOLEAN
型別,因此會以TINYINT(1)
代替來管理布林值。通常0
代表「假」,1
代表「真」。這種方式能讓旗標管理更加簡單。
UPDATE user_status SET is_active = NOT is_active WHERE user_id = 1;
在這個例子中,指定使用者的is_active
值會被反轉,實現簡單的布林切換。
小範圍整數管理
例如,商品庫存數量等僅需小範圍整數時,TINYINT
也很實用。如果商品數量不超過255,可以使用TINYINT UNSIGNED
來在無符號範圍內進行有效管理。

3. TINYINT與其他整數型別的比較
MySQL提供多種整數型別,其中TINYINT
是最小的。相比之下,INT
與BIGINT
能處理更大範圍的數值。以下是TINYINT
與其他主要整數型別的差異:
與INT的差異
INT
佔4位元組,範圍為-2147483648
到2147483647
,而TINYINT
僅佔1位元組,範圍為-128
到127
(有符號)或0
到255
(無符號)。因此,使用TINYINT能在節省記憶體的同時,有效管理適當範圍的數據。
與其他小型整數型別比較
除了TINYINT
,還有SMALLINT
(2位元組)、MEDIUMINT
(3位元組)等。不同大小的型別可處理的數值範圍不同,選擇正確的型別對資料設計很重要。
4. 有符號與無符號的使用區分
在MySQL中,TINYINT
可定義為有符號或無符號。理解其差異並正確使用,能讓資料管理更有效率。
無符號TINYINT的優點
無符號TINYINT
(TINYINT UNSIGNED
)能處理0
到255
的範圍,適用於不需要負數的情況。例如使用者年齡、商品數量等資料,使用UNSIGNED
能擴大正數範圍並提升效率。
有符號TINYINT的優點
有符號TINYINT
能處理-128
到127
,適用於需要負數的情境。例如溫度、氣溫等可能包含負數的資料就適合使用有符號TINYINT。

5. TINYINT的使用案例
以下展示如何在資料庫中實際使用TINYINT管理資料。例如,用於商品數量的資料表可這樣定義:
CREATE TABLE products (
product_id INT PRIMARY KEY,
quantity TINYINT UNSIGNED NOT NULL
);
在這個例子中,商品庫存數quantity
以無符號TINYINT
管理,最大值為255
。透過NOT NULL
確保一定會有值。
此外,管理使用者狀態時使用TINYINT
也能簡化旗標控制,特別是在資料量龐大時,能提升資料庫整體效能。
6. 總結與最佳實踐
TINYINT
是MySQL中最省記憶體的整數型別之一,非常適合用於小整數與旗標管理。無論是布林值還是小範圍整數,使用TINYINT
都能在儲存與效能上達到最佳化。