1. 程式人生 > >MySQL中各種數據類型的長度及在開發中如何選擇

MySQL中各種數據類型的長度及在開發中如何選擇

年月日 mysql image acl bin 數據類型 mes 指定 字符數

接觸MySQL這個數據庫大概快要兩年了,不過由於沒有特別深入系統的去學習,大多也是停留在一知半解的狀態。今天在工作中剛好碰到了表設計的問題,順便寫篇博客,把MySQL中數據類型和字段類型選擇這方面給弄清楚。

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

一、數值類型

  MySQL 支持所有標準SQL 中的數值類型,其中包括嚴格數值類型(INTEGER、SMALLINT、DECIMAL 和NUMERIC,以及近似數值數據類型(FLOAT、REAL 和DOUBLE PRECISION),並在標準SQL的基礎上擴展增加了 TINYINT、MEDIUMINT 和BIGINT 這3 種長度不同的整

型和存放位數據的BIT類型。在日常建表定義當中,整型中最常用的依舊是int類型的數據,浮點型中則視情況而定。每種數據類型表示的範圍如下表所示:

技術分享

註:我曾經在電信行業和銀行業參與過IT項目的開發,在使用他們提供的數據的時候總會發現數據庫中有小數點後數字時大都用的Decimal這種數據類型,而不是采用開發中常用的而且最大取值範圍一樣的Double類型。Double和Decimal都屬於浮點型,但是Decimal在精度上面來說,它的精度是Double的兩倍,Float的四倍,在銀行或者通信這些對數據要求十分精確的行業,Decimal是優於Double的更好的選擇。但是需要註意的事,Decimal也是浮點類型的數據,只不過相對來說精度更高,在實際使用中如果小數點後位數過多一樣會存在精度損失的問題。

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

二、時間日期類型

  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值。



三、字符串類型

  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輸入。其它的在平常開發中很少用到了。

MySQL中各種數據類型的長度及在開發中如何選擇