iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Modern Web

工作後才知道的後端 30 件小事系列 第 3

資料庫:什麼是 unsigned integer

前言

一開始在設計資料庫時常常不確定那個 type 要怎麼設,也不知道什麼是 unsigned integer ...

什麼是 unsigned integer

簡單來說就是沒有「負號」的整數資料類型,以 32-bit 整數為例,有號和無號能存的範圍不同:

  • 32-bit signed int: https://chart.googleapis.com/chart?cht=tx&chl=-2%5E%7B31%7D ~ https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B31%7D-1
  • 32-bit unsigned int: https://chart.googleapis.com/chart?cht=tx&chl=0 ~ https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B32%7D-1

32-bit unsgined 因為有一個位元是存正負號(正0負1),所以範圍才會是正負有 https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B31%7D 個可能;減一是因為有 0,所以正數範圍是 https://chart.googleapis.com/chart?cht=tx&chl=0https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B32%7D-1 ,確實是 https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B31%7D 個數。

二進制的 $-2^{31}$ (signed int)

[1][000...0] #第一個為1,後面31個0

二進制的 $2^{31}-1$ (signed int)

[0][111...1] #第一個為0,後面31個1

二進制的 -1 (signed int)

[1][111...1] #32個1

有興趣可以到這個網站玩玩看binaryconvert

那資料庫什麼時候用 unsigned integer

簡單來說,就看你那個欄位會不會有負數

例如 Laravel schema builder blueprint 提供的 id() 就是 unsigned 的 big integer

$table->id();

increments() 則是 unsigned integer

$table->increments('id');

更多請看官方文件


上一篇
如何用 SQL 去除重複資料 : Distint
下一篇
MySQL:如何讓 query 區分大小寫
系列文
工作後才知道的後端 30 件小事20

尚未有邦友留言

立即登入留言