開發(fā)中常用的MySQL數(shù)據(jù)類型詳解

前言

每種編程語言都有自己所定義的數(shù)據(jù)類型,mysql也不例外,平時我們在創(chuàng)建表時,需要根據(jù)業(yè)務(wù)要求,結(jié)合存儲、索引、字段臨界值等條件來為字段定制不一樣的類型。下面我們一起學(xué)習(xí)下mysql的幾種常用的數(shù)據(jù)類型。

Mysql中分為三大數(shù)據(jù)類型:數(shù)值型,字符型時間日期型



整型

mysql中整數(shù)型數(shù)據(jù)類型就有五種: tinyint,smallint,mediumint,int,bigint

tinyint:迷你整型,占用1個字節(jié)保存數(shù)據(jù),能夠表示256個數(shù)值 smallint:小整型,占用2個字節(jié)保存數(shù)據(jù),能夠表示65536個數(shù)值 mediumint:中整型,占用3個字節(jié)保存數(shù)據(jù) int:標準整型,占用4個字節(jié)保存數(shù)據(jù),42億多 bigint:大整型,占用8個字節(jié)保存數(shù)據(jù)

類型

字節(jié)

最小值(有符號/無符號)

最大值(有符號/無符號)

TINYINT

1

-128/0

127/255

SMALLINT

2

-32768/0

32767/65535

MEDIUMINT

3

-8388608/0

8388607/16777215

INT/INTEGE

4

-2147483648/0

2147483647

/4294967295

BIGINT

8

-9223372036854775808/0

9223372036854775807/18446744073709551615


為什么要有這么多整型?

  1. 能夠最大效率的使用磁盤空間,做到最少浪費。根據(jù)實際業(yè)務(wù)分配內(nèi)存空間來進行數(shù)據(jù)保存。

  2. 查詢的效率變高。

如何在項目中選擇使用何種整型? 根據(jù)業(yè)務(wù)需求,某一類數(shù)據(jù)的邊界值,看邊界值落在那個整型的范圍,就是用最小的那個。 在實際操作中tinyint,int使用的較多

整型表案例


默認的,整型都是有符號類型


無符號:表示數(shù)值只能是正的,不能有負數(shù) 語法:在字段類型后面使用unsigned進行標識 age tinyint unsigned;//年齡是一個迷你整型,無符號表示(0-255)

更新數(shù)據(jù)


顯示寬度:占的位數(shù),當(dāng)某個數(shù)值沒有達到顯示寬度的時候,在數(shù)值的左邊使用0來補足顯示寬度(不能改變數(shù)值本身大小)


默認的,系統(tǒng)不會進行0填充,需要給字段顯示的增加一個屬性:zerofill,0填充 系統(tǒng)默認顯示的寬度是數(shù)據(jù)類型能夠顯示的最大寬度。 0填充有一個特點:使用0填充的字段必須為無符號類型,不能為負數(shù)進行0填充


00填充是專門用來配合顯示寬度:顯示寬度只是在數(shù)據(jù)的值沒有達到指定寬度的時候使用0填充,0填充或者顯示寬度都不會限制原來值的大小,值的大小由數(shù)據(jù)類型決定。


什么地方會使用顯示寬度? 在一些需要使用0填充地方不改變原來值的大小,卻能夠用寬度來固定顯示數(shù)據(jù),保證前端數(shù)據(jù)的顯示不會改變原來的css結(jié)構(gòu)。比如說月份,日期,時間。


小數(shù)型

帶有小數(shù)部分的數(shù)據(jù)。

mysql中小數(shù)型分為兩種:浮點型,定點型

浮點型:float和double float:采用4個字節(jié)保存數(shù)據(jù) double:采用八個字節(jié)保存數(shù)據(jù)


浮點數(shù)的存儲使用4個字節(jié)32位存儲,第一位叫做符號位,會使用符號位后面的8位用來存儲街碼(底數(shù)+指數(shù)),其他的用來表示數(shù)據(jù)。 浮點數(shù)會丟失精度 float:最大有效位7位左右 double:最大有效位為15位左右


浮點數(shù)的使用方式 float(M,D):M表示整個長度,D表示小數(shù)位的長度


數(shù)據(jù)處理

浮點數(shù)只適用于那些對于數(shù)值精確要求不高,但是數(shù)量特別大的數(shù)據(jù)。 凡是跟錢相關(guān)絕對不用浮點數(shù)。


定點型:decimal 能夠自動的擴展寬度來保存數(shù)據(jù),保證數(shù)據(jù)的精度,基于小數(shù)部分,如果超出指定長度,仍然會進行四舍五入。 語法:decimal(M,D):M表示總長度,D表示小數(shù)部分的長度



定點型與浮點型區(qū)別



定點型的數(shù)據(jù)范圍

decimal(65,30)

默認的,如果不使用括號標識decimal的長度,那么默認的是decimal(10,0); 凡是涉及到錢的都會在數(shù)據(jù)庫端使用decimal來進行數(shù)據(jù)的存儲和運算。


字符串型

mysql有以下字符串類型: char,varchar,text,blob,enum,set

char

定長字符串,表示磁盤會分配固定長度的空間去存儲數(shù)據(jù) 如果數(shù)據(jù)不夠長度,空間依然被占用 如果數(shù)據(jù)超出長度,系統(tǒng)會報錯 語法:char(L),L表示長度,L表示的字符長度,L的最大值是255

varchar

變長字符串,表示磁盤空間會根據(jù)實際數(shù)據(jù)的長度來自動分配存儲空間,但是長度不能超過指定長度varchar(L),存儲的數(shù)據(jù)只能小于或者等于L個字符,L的理論值是65535 varchar在存儲之外還有一個額外的1到2個字節(jié)來保存當(dāng)前varchar的實際占用長度

char和varchar對比(utf8) :一個字符 = 3個字節(jié)

字符 Char(4)占字節(jié)數(shù) Varchar(4)占字節(jié)數(shù) Char實占字節(jié)數(shù) Varchar實占字節(jié)數(shù)
A 4 * 3 = 12 4 * 3 + 1 = 13 12 3 + 1 = 4
ABCD 4 * 3 = 12 4 * 3 + 1 = 13 12 13

char和varchar區(qū)別

  1. char的效率比varchar要高

  2. varchar比char節(jié)省空間



text:字符串文本

blob:二進制文本

在記錄里面不計算長度(不占記錄長度),基本可以“無限”存儲數(shù)據(jù)

數(shù)據(jù)庫的字符串類型有很多,但是是從數(shù)據(jù)庫管理員的角度出發(fā)去考慮問題。

  1. 考慮磁盤空間的開銷

  2. 考慮執(zhí)行效率 作為PHP程序員,基本不考慮這些,只考慮如何能夠方便PHP進行操作。所以真正配合PHP使用的字符串:char,varchar,和text



數(shù)據(jù)庫的字符串類型有很多,但是是從數(shù)據(jù)庫管理員的角度出發(fā)去考慮問題。

1. 考慮磁盤空間的開銷

2. 考慮執(zhí)行效率

作為PHP程序員,基本不考慮這些,只考慮如何能夠方便PHP進行操作。所以真正配合PHP使用的字符串:char,varchar,和text


時間日期型


類型

顯示格式

取值

存儲空間

零值 ??

DATETIME

YYYY-MM-DD HH:MM:SS

'1000-01-01 00:00:00''9999-12-31 23:59:59'

8

0000-00-00 00:00:00

TIMESTAMP

YYYY-MM-DD HH:MM:SS

‘1970-01-01 00:00:00’2038-01-19 03:14:07

4

0000-00-00 00:00:00

DATE

YYYY-MM-DD

'1000-01-01''9999-12-31

3

0000-00-00

TIME

HH:MM:SS

-838:59:59''838:59:59'

3

00:00:00

YEAR

YYYY

19012155

1

0000

datetime:表示年月日時分秒,能夠表示9000年,占用8個字節(jié) timestamp:時間戳,使用標準整型存儲,表現(xiàn)卻是年月日,時分秒 date:日期部分,可以表示1000-9999年 time:時間部分,表示的是一個時間段,從過去什么時間到以后的某個時間 year:年,使用一個字節(jié)存在,一個字節(jié)只能表示256個數(shù)值,在計算的時候加上1900再輸出


timestamp時間戳并不能使用真正的時間戳

總結(jié)

以上介紹了我們平時常用的mysql類型,掌握好這幾種類型,可以很好地應(yīng)用在項目的業(yè)務(wù)中。當(dāng)然,還有其他的類型大家也要去了解下,比如枚舉類型,set類型等。

*如有錯誤請留言指正。


推薦閱讀

看完這一篇,相信你會熟悉mysql的基本用法


MySQL常用語句命令總結(jié)

PHP+MySQL實現(xiàn)海量數(shù)據(jù)導(dǎo)入導(dǎo)出的一些總結(jié)

多進程PHP腳本實現(xiàn)海量數(shù)據(jù)轉(zhuǎn)移總結(jié)



更多分享歡迎關(guān)注公眾號【php_beginner】!




?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容