:::

6-1 MySQL常用資料類型一覽

一、參考手冊

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/data-types.com.coder114.cn.html

二、數字類型

  1. 整數型: Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill
    • 對於int型 : 占的位元組越多,存儲的範圍也越大。
    • Tinyint 1個位元組 8個位元
    • 可選參數:XXint(M)  unsigned zerofill

      例:age tinyint(4) unsigned,或 stunum smallint(6) zerofill

      Unsigned:代表此列為無符號類型,會影響到列的存儲範圍(範圍從0開始)

      (不加unsinged,則該列預設是有符號類型,範圍從負數開始)

    • zerofill:代表0填充,即:如果該數字不足參數M位元,則自動補0,補夠M位。
      • 如果沒有zerofill屬性,單獨的參數M,沒有任何意義.。
      • 如果設置某列為zerofill,則該列已經預設為 unsigned,無符號類型。
  2. 小數型:Float(M,D),DOUBLE(M),decimal(M,D)
    • M代表總位數,而D代表小數位。(小數右邊的位數)
    • 浮點數能存10^{38}  ~ 10^{-38}  ,float M<=24, 佔4個位元組,double占8位元組。
    • DECIMAL(M,D) ,是把整數部分,和小數部分,分開存儲的, 比float精確。
      • 例:money float(10,2) 、amount decimal(10,2)
      • 例:total double(20,2) 、amount2 decimal(20,2)
    • float 最大的問題是有效位數只有7個,其他會亂塞值,所以只能用在精準度要求不高的地方,避免使用。
    • double 適合一般般數理運算使用,可以存很大的數字,但有效位數約17個,mysql內建的數學函式也是以此型態作為運算基準。
    • decimal 是精準數值,占用空間比較大,適合算和錢有關的,或是需要存較精準的數字。

三、文字類型

  1. CHAR(M) 固定長度字串:
    • M 代表寬度,0<=M<=255之間。
    • 例:Char(10) ,則能輸入10個字元。
    • 如果實際存儲內容不足M個,則後面加空格補齊;取出來的時候,再把後面的空格去掉。所以,如果內容最後有空格,將會被清除。
  2. VARCHAR(M) 變動長度字串:
    • M 代表寬度,0<=M<=65535之間。
    • 例:Varchar(10) ,則能輸入10個字元。
    • 實際存儲內容不足M個,以實際佔的字元為主,如果內容最後有空格,不會被清除。
  3. char(M),varchar(M)限制的是字元,不是位元組。
    • 例:char(4),varchar(4) 比較英文及中文字。
  4. 差異:
    • char(M)存取速度快,但浪費空間存儲。
    • 使用時機:用戶名用 char(10),個人簡介 varchar(140)
    • select concat(char,'!'),concat(varchar,'!') from table;

       

  5. Text:文本類型,可以存比較大的文本段,搜索速度稍慢
    • 如果不是特別大的內容,建議用char,varchar來代替。
    • 不用加預設值 (加了也沒用)。

 四、日期時間類型

  1. Date:日期
    • 格式:1998-12-31
    • 範圍:1000/01/01 ,9999/12/31
  2. Time 時間
    • 格式:13:56:23
    • 範圍: -838:59:59 -->838:59:59
  3. datetime時期時間
    • 格式:1998-12-31 13:56:23
    • 範圍:1000/01//01 00:00:00  ---> 9999:12:31 23:59:59
  4. timestamp 時間戳記
    • 1970-01-01 00:00:00 到當前的秒數。
    • 一般存註冊時間,商品發佈時間等,並不是用datetime存儲,而是用時間戳記。因為datetime雖然直觀,但計算不便。

五、列表整理

  類型 bytes

範圍

 

選項
數字類型 TINYINT(M) 非常小整數 1 -128到127,unsigned狀態則為0到255 unsigned、zerofill
SMALLINT(M) 較小整數 2 -32768到32767,unsigned狀態則為0到65535 unsigned、zerofill
MEDIUMINT(M) 中型整數 3 -8388608到8388607,unsigned狀態則為0到16777215 unsigned、zerofill
INT(M) 標準整數 4 -2147483648到2147483647unsigned狀態則為0到4294967295 unsigned、zerofill
BIGINT(M) 大整數 8 -9223372036854775808到9223372036854775807unsigned狀態則為0到18446744073709551615 unsigned、zerofill
FLOAT(M) 單精確度浮點數 4 FLOAT(M,D)最小非零值:±1.175494351E - 38FLOAT(4)最大非零值:±3.402823466E + 38FLOAT(8)最大非零值:±1.7976931348623157E + 308 zerofill
DOUBLE(M) 雙精確度浮點數 8 最小非零值:±2.2250738585072014E - 308 zerofill
DECIMAL(M,D) M 可變;其值的範圍依賴於M和D zerofill
日期類型 DATE 日期 3 1000-01-01到9999-12-31  
DATETIME 日期時間 8 1000-01-01 00:00:00到9999-12-31 23:59:59  
TIMESTAMP(M) 時間戳記 2,4,6,8,10,12,14 (左) 1970-01-01 00:00:00到2037  
TIME 時間 3 -838:59:59到838:59:59  
YEAR 年度 1 1901到2155  
文字類型 CHAR(M) 固定長度字串 M 1<=M<=255  
VARCHAR(M) 變動長度字串 M+1 1<=M<=65535  
TINYTEXT非常小的文本串 M+1 255個字元  
TEXT小文本串 M+2 65535個字元  
MEDIUMTEXT中等文本串 M+3 16777215個字元  
LONGTEXT大文本串 M+4 4294967295個字元  
TINYBLOB超小型BLOB M+1 255個字元  
BLOB小型BLOB M+2 65535個字元  
MEDIUMBLOB中型BLOB M+3 16777215個字元  
LONGBLOB大型BLOB M+4 4294967295個字元  
特殊 ENUM 單選選項 1或2 最多65535個選項  
SET 複選選項 1,2,3,4,8 最多64個選項