《Mysql 數值類型》
一:整型
- 常用類型
-
-
類型 占用(字節) 範圍 無符號範圍 無符號範圍 TINYINT 1 2的8次方 -128 — 127 0 — 256 SMALLINT 2 2的15次方 -3276 8 — 3276 7 0 — 6553 5 INT
-
- 使用選擇
- 在 整型 的使用上,這些類型在很大程度上是相同的,只有它們存儲的值的範圍是不相同的。
- 所以需要根據使用值 範圍 來選擇 整型類型。
- 關於整型寬度 (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
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 字節 默認為(10,0) 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 數值類型》