資料型態

數字

整數

  • TINYINT:1byte
  • SMALLINT:2byte
  • MEDIUMINT:3byte(少見)
  • INT:4byte
  • BIGINT:8byte

TINYINT UNSIGNED 只有非負整數

INT(10)的(10)當年是設計用來做排版的,現在已經沒用途。

浮點數

  • FLOAT
  • DOUBLE
  • DECIMAL:精確的值

字串CHAR

  • CHAR(4) 四個字
  • VARCHAR(4) 用 x 個 byte 去存總共需要幾個byte去儲存字,然後接著存字。

根據所使用的 UTF-8 每個字需要 3 個 byte

VARCHAR(100) 所需要的最大 byte 數 = 3 * 100 + 2 = 302 byte

總共 100 個 UTF-8 的字元,需要額外的 2 個 byte 去儲存字串所需要的byte數 300

如何選擇用 CHAR 還是 VARCHAR?

VARCHAR 彈性好

VARCHAR 的 INDEX 永遠使用最大 BYTE 數空間來表示一個值

建議不要對 CHAR、VARCHAR 做 INDEX

這會讓 INDEX 的大小變得很大

可以只對字串的前 N 個字做 INDEX

MySQL:PARTIAL INDEX postgresql:FUNCTIONAL INDEX

https://www.postgresql.org/docs/9.5/static/indexes-expressional.html

字串TEXT

TINYTEXT TEXT MEDIUMTEXT LONGTEXT

不能做 Index

日期與時間

  • DATE
  • DATETIME
  • TIME
  • TIMESTAMP
  • YEAR

  • INT

  • INT UNSIGNED

建議儲存 UTC 時間 某些時候會使用 INT,INT 的好處:跨平台

BOOL

實際上是 TINYINT

另外還有這兩種: ENUM (2byte) SET

results matching ""

    No results matching ""