1. 程式人生 > >《Mysql 數值類型》

《Mysql 數值類型》

not tro 一個 date 不同 年份 現在 有效 無符號

一:整型

  - 常用類型

    • 類型            占用(字節)       範圍             無符號範圍                      無符號範圍  
      TINYINT         1              2的8次方          -128127                    0256
      SMALLINT        2              2的15次方         -3276 83276 7              06553 5
      INT             
      4 2的31次方 -2147 4836 462147 4836 47 0 — 4294 9672 95 BIGNET 8

  

  - 使用選擇

    - 在 整型 的使用上,這些類型在很大程度上是相同的,只有它們存儲的值的範圍是不相同的。

    - 所以需要根據使用值 範圍 來選擇 整型類型

  

  - 關於整型寬度 (zerofill)

    - MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標準進行擴展(如 INT(6),6即是其寬度指示器。

    - 該寬度指示器並不會影響int列存儲字段的大小,也就是說,超過6位它不會自動截取,依然會存儲,只有超過它本身的存儲範圍才會截取;此

    - 處寬度指示器的作用在於該字段是否有zerofill,如果有就未滿足6位的部分就會用0來填充

    - 註意的是,使用一個寬度指示器不會影響字段的大小和它可以存儲的值的範圍。

    - 設置一個字段為 zerofill 那麽它必然是 unsigned 的

    • // 創建字段
      mysql> create table `demo` ( `num` tinyint(4) zerofill); Query OK, 0 rows affected (0.03
      sec) // 查看字段屬性
      mysql
      > desc demo; +----------+------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------------------+------+-----+---------+-------+ | num | tinyint(4) unsigned zerofill | YES | | NULL | | +----------+------------------------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
      // 插入數據 mysql
      > insert into demo values (1); Query OK, 1 row affected (0.00 sec) // 查看數據 (寬度補充) mysql> select * from demo; +------+ | num | +------+ | 0001 | +------+

二: 浮點型

  - 常用類型

    • 類型                占用(字節)
      FLOAT(M,D)          4
      DOUBLE(M,D)         8
      DECIMAL(M, D)       M+2 字節 默認為(100)
      
      M 表示可以顯示多少位數字(數字+小數點)
      D 位於小數點後,又稱 精度/標度
        (數據的精度總是能精確到D位,也就是數據的不精確一定出現在小數點後)
        (數據存儲的時候只能存儲到D位小數)
      超出的位,Mysql會四舍五入進行保存

  

  - 使用選擇

    - 對於精度準確度要求不高浮點數存儲可以使用 float

      - float/double 不準確在於,在 Mysql 中,數據精確度取決於分配給數據結構的長度。在按照長度進行二進制轉換時候,就會造成數據的不不準確。

      - double 和 float 的區別double 精度高,有效數字 16 位,float 精度 7 位。

      - 但 double 消耗內存是 float 的兩倍,double 的運算速度比 float 慢得多,

      - SO,能用 float 時不要用 double(以省內存,加快運算速度)。

    - 如果需要存儲一個準確的 浮點數 ,使用 DECIMAL

      - 但是 DECIMAL 存儲長度最大為 65.

      - 如果需要更大精度,可以使用 字符串 存儲

    - 《MySQL如何選擇float, double, decimal》

三: 字符串

  - 常用類型

    • 類型            占用(字節)     
      char(n)         3*n
      varchar(n)      3*實際

  

  - 使用場景

    - char善於存儲經常改變的值,或者長度相對固定的值,比如type、ip地址或md5之類的數據,由於 char 定長 不容易產生碎片。

      - char類型是使用固定長度空間進行存儲,範圍0-255。

      - 比如CHAR(30)能放30個字符,存放abcd時,尾部會以空格補齊,實際占用空間 30 * 3bytes (utf8)。檢索它的時候尾部空格會被去除。

    - varchar善於存儲值的長短不一的列,也是用的最多的一種類型,節省磁盤空間。

  

  - char 和 varchar 的區別

四:日期類型

  - 常用類型

    • 類型                保存信息             占用(字節)
      DATE                年月日              4
      DATETIME            年月日時分秒         8
      TIME                時分秒              3
      TIMESTAMP           年月日時分秒         4
      YEAR                年                 1

  - 使用場景

    - DATE/DATETIME/TIME 由於其存儲信息不同,所以根據需要保存內容選擇

      - 由於 TIMESTAMP 支持時間太小(至 2038年), 所以時間存儲盡量使用 DATETIME

    - 如果只想保存年份,使用 YEAR    

《Mysql 數值類型》