MySql中字段類型與長度和取值範圍解析

MySQL中的數據類型大致分爲三大類,數值類型,時間日期類型以及字符串類型。下面將對這三種類型進行詳細的介紹。數據庫

1、數值類型編程

  MySQL 支持全部標準SQL 中的數值類型,其中包括嚴格數值類型(INTEGER、SMALLINT、DECIMAL 和NUMERIC),以及近似數值數據類型(FLOAT、REAL 和DOUBLE PRECISION),並在標準SQL的基礎上擴展增長了 TINYINT、MEDIUMINT 和BIGINT 這3 種長度不一樣的整型和存放位數據的BIT類型。在平常建表定義當中,整型中最經常使用的依舊是int類型的數據,浮點型中則視狀況而定。每種數據類型表示的範圍以下表所示:oracle

 

mediumint無符號最大爲:16777215spa

注:我曾經在電信行業和銀行業參與過IT項目的開發,在使用他們提供的數據的時候總會發現數據庫中有小數點後數字時大都用的Decimal這種數據類型,而不是採用開發中經常使用的並且最大取值範圍同樣的Double類型。Double和Decimal都屬於浮點型,可是Decimal在精度上面來講,它的精度是Double的兩倍,Float的四倍,在銀行或者通訊這些對數據要求十分精確的行業,Decimal是優於Double的更好的選擇。可是須要注意的事,Decimal也是浮點類型的數據,只不過相對來講精度更高,在實際使用中若是小數點後位數過多同樣會存在精度損失的問題。在《阿里巴巴Java編程規範》,明確提出使用Decimal取代double和floatblog

     爲整型指定寬度,如INT(11),對於存儲來講INT(1)和INT(20)是相同的,它不會限制值的合法範圍,只是規定了MySQL與客戶端的交互應該顯示多少位而已,好比你向INT(1)中插入了123456值,數據庫中其實已經存入了123456,只是對於客戶端查出來是1而已。ci

 

2、時間日期類型開發

  MySQL中提供了五種類型的時間類型,分別爲DATE,DATETIME,TIMESTAMP,TIME和YEAR。下表是日期類型的詳細區間。字符串

  • 若是要用來表示年月日,一般用DATE 來表示。
  • 若是要用來表示年月日時分秒,一般用DATETIME 表示。
  • 若是隻用來表示時分秒,一般用TIME 來表示。
  • 若是須要常常插入或者更新日期爲當前系統時間,則一般使用TIMESTAMP 來表示。
  • TIMESTAMP 值返回後顯示爲「YYYY-MM-DD HH:MM:SS」格式的字符串,顯示寬度固定爲19 個字符。若是想要得到數字值,應在TIMESTAMP 列添加+0。若是隻是表示年份,能夠用YEAR 來表示,它比DATE 佔用更少的空間。YEAR 有2 位或4 位格式的年。默認是4 位格式。在4 位格式中,容許的值是1901~2155 和0000。在2 位格式中,容許的值是70~69,表示從1970~2069 年。MySQL 以YYYY 格式顯示YEAR值。



3、字符串類型效率

  MySQL 中提供了多種對字符數據的存儲類型,不一樣的版本可能有所差別。以5.0 版本爲例,MySQL 包括了CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和SET 等多種數據類型。其中經常使用的爲VARCHAR,TEXT等。其中CHAR和VARCHAR存在如下區別
 基礎

1.CHAR的長度是固定的,而VARCHAR2的長度是能夠變化的, 好比,存儲字符串「abc",對於CHAR (10),表示你存儲的字符將佔10個字節(包括7個空字符),而一樣的
VARCHAR2 (10)則只佔用3個字節的長度,10只是最大值,當你存儲的字符小於10時,按實際長度存儲。 
2.CHAR的效率比VARCHAR2的效率稍高。 
3.目前VARCHAR是VARCHAR2的同義詞。工業標準的VARCHAR類型能夠存儲空字符串,可是oracle不這樣作,儘管它保留之後這樣作的權利。Oracle本身開發了一個數據類型VARCHAR2,
這個類型不是一個標準的VARCHAR,它將在數據庫中varchar列能夠存儲空字符串的特性改成存儲NULL值。若是你想有向後兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。

 下表列出了MySQL中全部的字符類型。

  在實際的建表定義字段類型時,字符串一般會考慮使用VARCHAR,當字段數據有明確的精度和長度時使用CHAR更加高效。在有長文本輸入時選擇TEXT輸入。其它的在日常開發中不多用到了。

相關文章
相關標籤/搜索