前言:
要了解一個(gè)數(shù)據(jù)庫,我們必須了解其支持的數(shù)據(jù)類型。MySQL 支持大量的字段類型健无,其中常用的也有很多。前面文章我們也講過 int 及 varchar 類型的用法液斜,但一直沒有全面講過字段類型睬涧,本篇文章我們將把字段類型一網(wǎng)打盡,講一講常用字段類型的用法旗唁。
常用的字段類型大致可以分為數(shù)值類型、字符串類型痹束、日期時(shí)間類型三大類检疫,下面我們按照分類依次來介紹下。
1.數(shù)值類型
數(shù)值類型大類又可以分為整型祷嘶、浮點(diǎn)型屎媳、定點(diǎn)型三小類夺溢。
整型主要用于存儲(chǔ)整數(shù)值,主要有以下幾個(gè)字段類型:
整型經(jīng)常被用到烛谊,比如 tinyint风响、int、bigint 丹禀。默認(rèn)是有符號(hào)的状勤,若只需存儲(chǔ)無符號(hào)值,可增加 unsigned 屬性双泪。
int(M)中的 M 代表最大顯示寬度持搜,并不是說 int(1) 就不能存儲(chǔ)數(shù)值10了,不管設(shè)定了顯示寬度是多少個(gè)字符焙矛,int 都是占用4個(gè)字節(jié)葫盼,即int(5)和int(10)可存儲(chǔ)的范圍一樣。
存儲(chǔ)字節(jié)越小村斟,占用空間越小贫导。所以本著最小化存儲(chǔ)的原則,我們要盡量選擇合適的整型蟆盹,例如:存儲(chǔ)一些狀態(tài)值或人的年齡可以用 tinyint 孩灯;主鍵列,無負(fù)數(shù)日缨,建議使用 int unsigned 或者 bigint unsigned钱反,預(yù)估字段數(shù)字取值會(huì)超過 42 億,使用 bigint 類型匣距。
浮點(diǎn)型主要有 float面哥,double 兩個(gè),浮點(diǎn)型在數(shù)據(jù)庫中存放的是近似值毅待,例如float(6,3)尚卫,如果插入一個(gè)數(shù)123.45678,實(shí)際數(shù)據(jù)庫里存的是123.457尸红,但總個(gè)數(shù)還以實(shí)際為準(zhǔn)悼沿,即6位,整數(shù)部分最大是3位余寥。 float 和 double 平時(shí)用的不太多永罚。
定點(diǎn)型字段類型有 DECIMAL 一個(gè),主要用于存儲(chǔ)有精度要求的小數(shù)盅蝗。
DECIMAL 從 MySQL 5.1 引入鳖链,列的聲明語法是 DECIMAL(M,D) 。 NUMERIC 與 DECIMAL 同義墩莫,如果字段類型定義為 NUMERIC 芙委,則將自動(dòng)轉(zhuǎn)成 DECIMAL 逞敷。
對(duì)于聲明語法 DECIMAL(M,D) ,自變量的值范圍如下:
- M是最大位數(shù)(精度)灌侣,范圍是1到65推捐。可不指定侧啼,默認(rèn)值是10牛柒。
- D是小數(shù)點(diǎn)右邊的位數(shù)(小數(shù)位)。范圍是0到30慨菱,并且不能大于M焰络,可不指定,默認(rèn)值是0符喝。
例如字段 salary DECIMAL(5,2)闪彼,能夠存儲(chǔ)具有五位數(shù)字和兩位小數(shù)的任何值,因此可以存儲(chǔ)在salary列中的值的范圍是從-999.99到999.99协饲。
2.字符串類型
字符串類型也經(jīng)常用到畏腕,常用的幾個(gè)類型如下表:
其中 char 和 varchar 是最常用到的。char 類型是定長的茉稠,MySQL 總是根據(jù)定義的字符串長度分配足夠的空間描馅。當(dāng)保存 char 值時(shí),在它們的右邊填充空格以達(dá)到指定的長度而线,當(dāng)檢索到 char 值時(shí)铭污,尾部的空格被刪除掉。varchar 類型用于存儲(chǔ)可變長字符串膀篮,存儲(chǔ)時(shí)嘹狞,如果字符沒有達(dá)到定義的位數(shù),也不會(huì)在后面補(bǔ)空格誓竿。
char(M) 與 varchar(M) 中的的 M 表示保存的最大字符數(shù)磅网,單個(gè)字母、數(shù)字筷屡、中文等都是占用一個(gè)字符涧偷。char 適合存儲(chǔ)很短的字符串,或者所有值都接近同一個(gè)長度毙死。例如燎潮,char 非常適合存儲(chǔ)密碼的 MD5 值,因?yàn)檫@是一個(gè)定長的值扼倘。對(duì)于字符串很長或者所要存儲(chǔ)的字符串長短不一的情況跟啤,varchar 更加合適。
我們?cè)诙x字段最大長度時(shí)應(yīng)該按需分配,提前做好預(yù)估隅肥,能使用 varchar 類型就盡量不使用 text 類型。除非有存儲(chǔ)長文本數(shù)據(jù)需求時(shí)袄简,再考慮使用 text 類型腥放。
BLOB 類型主要用于存儲(chǔ)二進(jìn)制大對(duì)象,例如可以存儲(chǔ)圖片绿语,音視頻等文件秃症。日常很少用到,有存儲(chǔ)二進(jìn)制字符串時(shí)可以考慮使用吕粹。
3.日期時(shí)間類型
MySQL支持的日期和時(shí)間類型有 YEAR 种柑、TIME 、DATE 匹耕、DATETIME 聚请、TIMESTAMP,幾種類型比較如下:
涉及到日期和時(shí)間字段類型選擇時(shí)稳其,根據(jù)存儲(chǔ)需求選擇合適的類型即可驶赏。
關(guān)于 DATETIME 與 TIMESTAMP 兩種類型如何選用,可以按照存儲(chǔ)需求來既鞠,比如要求存儲(chǔ)范圍更廣煤傍,則推薦使用 DATETIME ,如果只是存儲(chǔ)當(dāng)前時(shí)間戳嘱蛋,則可以使用 TIMESTAMP 類型蚯姆。不過值得注意的是,TIMESTAMP 字段數(shù)據(jù)會(huì)隨著系統(tǒng)時(shí)區(qū)而改變但 DATETIME 字段數(shù)據(jù)不會(huì)洒敏×淞担總體來說 DATETIME 使用范圍更廣。
總結(jié):
本篇文章主要介紹了 MySQL 中常用的字段類型桐玻,平時(shí)用到的字段類型基本都在這里了篙挽,以一張思維導(dǎo)圖總結(jié)如下: