MySQL數(shù)據(jù)庫常見字段類型長度匯總大全
一、整數(shù)
TINYINT
- 長度:固定為1個字節(jié)。
- 范圍:-128 到 127(有符號)或 0 到 255(無符號)。
SMALLINT
- 長度:固定為2個字節(jié)。
- 范圍:-32,768 到 32,767(有符號)或 0 到 65,535(無符號)。
MEDIUMINT
- 長度:固定為3個字節(jié)。
- 范圍:-8,388,608 到 8,388,607(有符號)或 0 到 16,777,215(無符號)。
INT
- 長度:固定為4個字節(jié)。
- 范圍:-2,147,483,648 到 2,147,483,647(有符號)或 0 到 4,294,967,295(無符號)。
BIGINT
- 長度:固定為8個字節(jié)。
- 范圍:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符號)或 0 到 18,446,744,073,709,551,615(無符號)。
二、字符串
CHAR
- 長度:0到255個字符。
- 存儲:定長,總是使用指定的長度。如果存儲的字符串長度小于定義的長度,它將使用空格填充。
VARCHAR
- 長度:0到65535個字符,但實際最大長度取決于最大行大?。?5535字節(jié))和使用的字符集。
- 存儲:變長,只使用必要的空間加上一個或兩個額外的字節(jié)來記錄字符串的長度。
BINARY
- 長度:0到65535個字節(jié),取決于字符集和校對規(guī)則。
- 存儲:定長,總是使用指定的長度。BINARY類型類似于CHAR類型,但存儲二進制字節(jié)字符串。
VARBINARY
- 長度:0到65535個字節(jié),取決于字符集和校對規(guī)則。
- 存儲:變長,只使用必要的空間加上一個額外的字節(jié)來記錄字符串的長度。VARBINARY類型類似于VARCHAR類型,但存儲二進制字節(jié)字符串。
TINYTEXT
- 長度:最大255個字符。2^8 − 1
- 存儲:存儲長度需要1個字節(jié),字符串本身存儲在單獨的表中。
TEXT
- 長度:最大65,535個字符。2^16 − 1
- 存儲:存儲長度需要2個字節(jié),字符串本身存儲在單獨的表中。
MEDIUMTEXT
- 長度:最大16,777,215個字符。2^24 − 1
- 存儲:存儲長度需要3個字節(jié),字符串本身存儲在單獨的表中。
LONGTEXT
- 長度:最大4,294,967,295個字符。2^32 − 1
- 存儲:存儲長度需要4個字節(jié),字符串本身存儲在單獨的表中。
TINYBLOB
- 長度:最大255個字節(jié)。2^8 − 1
- 存儲:存儲長度需要1個字節(jié),二進制數(shù)據(jù)存儲在單獨的表中。
BLOB
- 長度:最大65,535個字節(jié)。2^16 − 1
- 存儲:存儲長度需要2個字節(jié),二進制數(shù)據(jù)存儲在單獨的表中。
MEDIUMBLOB
- 長度:最大16,777,215個字節(jié)。2^24 − 1
- 存儲:存儲長度需要3個字節(jié),二進制數(shù)據(jù)存儲在單獨的表中。
LONGBLOB
- 長度:最大4,294,967,295個字節(jié)。2^32 − 1
- 存儲:存儲長度需要4個字節(jié),二進制數(shù)據(jù)存儲在單獨的表中。
TEXT和BLOB字段類型之間的主要區(qū)別?
- 存儲內(nèi)容:
TEXT:通常用于存儲長文本內(nèi)容,如文章、評論等。
BLOB:通常用于存儲二進制數(shù)據(jù),如圖片、音頻、視頻等。 - 最大長度:
TEXT:TINYTEXT 最多可存儲 255 個字符,TEXT 最多可存儲 65,535 個字符,MEDIUMTEXT 最多可存儲 16,777,215 個字符,LONGTEXT 最多可存儲 4,294,967,295 個字符。
BLOB:TINYBLOB 最多可存儲 255 個字節(jié),BLOB 最多可存儲 65,535 個字節(jié),MEDIUMBLOB 最多可存儲 16,777,215 個字節(jié),LONGBLOB 最多可存儲 4,294,967,295 個字節(jié)。 - 字符集和排序規(guī)則:
TEXT:與字符集和排序規(guī)則相關(guān),因為它存儲的是文本數(shù)據(jù)。
BLOB:與字符集和排序規(guī)則無關(guān),因為它存儲的是二進制數(shù)據(jù)。 - 存儲和檢索:
TEXT:當(dāng)你存儲或檢索TEXT字段時,MySQL會考慮字符集和排序規(guī)則。
BLOB:對于BLOB字段,MySQL將其視為純粹的二進制數(shù)據(jù),不會考慮字符集或排序規(guī)則。 - 用途:
TEXT:通常用于需要存儲和檢索大量文本數(shù)據(jù)的場景,如文章、評論等。
BLOB:通常用于存儲大型二進制對象,如圖片、音頻、視頻等,或者存儲與字符集和排序規(guī)則無關(guān)的數(shù)據(jù)。
選擇TEXT還是BLOB主要取決于你的數(shù)據(jù)需求和場景。如果你正在存儲大量的文本數(shù)據(jù),并且需要考慮到字符集和排序規(guī)則,那么TEXT可能是更好的選擇。如果你正在存儲大型二進制對象或與字符集和排序規(guī)則無關(guān)的數(shù)據(jù),那么BLOB可能更適合你的需求。
三、浮點數(shù)
NUMERIC(M, D), DECIMAL(M, D)
- 精度和標度:M是精度(總位數(shù))從1到65,D是標度(小數(shù)點后的位數(shù))從0到30。
- 存儲:取決于精度和標度。根據(jù)指定的精度和標度使用固定數(shù)量的字節(jié)。
FLOAT
FLOAT 是單精度浮點數(shù)數(shù)據(jù)類型,用于存儲近似值。
FLOAT 類型的數(shù)值可能會有舍入誤差,因為浮點數(shù)使用二進制表示,無法精確表示某些十進制小數(shù)。
存儲:32位(4字節(jié))來存儲數(shù)值,并且可以存儲大約7位有效數(shù)字。
DOUBLE
DOUBLE 是雙精度浮點數(shù)數(shù)據(jù)類型,也用于存儲近似值。
與 FLOAT 類似,DOUBLE 類型的數(shù)值也可能會有舍入誤
存儲:使用64位(8字節(jié))來存儲數(shù)值,并且可以存儲大約15位有效數(shù)字。
浮點數(shù)的區(qū)別?
DECIMAL 和 NUMERIC 是精確數(shù)值類型,用于需要精確計算的場景,如貨幣值。它們以字符串形式存儲,不會引入舍入誤差。
FLOAT 和 DOUBLE 是浮點數(shù)類型,用于存儲近似值。它們使用二進制表示,可能會有舍入誤差。
DECIMAL 和 NUMERIC 需要指定精度和標度,而 FLOAT 和 DOUBLE 則不需要。
存儲大小方面,DECIMAL 和 NUMERIC 的存儲大小根據(jù)指定的精度和標度而定,而 FLOAT 固定為4字節(jié),DOUBLE 固定為8字節(jié)。
四、總結(jié)
選擇字段的原則
- 通常更小的更好
應(yīng)該盡量使用可以正確存儲數(shù)據(jù)的最小數(shù)據(jù)類型,更小的數(shù)據(jù)類型通常更快,因為它們占用更少的磁盤、內(nèi)存和CPU緩存,并且處理時需要的CPU更少,但是要確保沒有低估需要存儲的值的范圍,如果無法確認哪個數(shù)據(jù)類型,就選擇你認為不會超過范圍的最小類型
- 簡單就好
簡單數(shù)據(jù)類型的操作,通常需要更少的CPU
整型比字符操作代價更低,因為字符的字符集和校對規(guī)更復(fù)雜
使用datetime類型,使用MySQL自建類型而不是字符串來存儲日期和時間
用整型存儲IP地址,可以用函數(shù)把字符串轉(zhuǎn)成整型存,空間小,INET_ATON、INET_NTOA - 盡量避免null
如果查詢中包含可為NULL的列,對MySQL來說很難優(yōu)化,因為可為null的列使得索引、索引統(tǒng)計和值比較都更加復(fù)雜,坦白來說,通常情況下null的列改為not null帶來的性能提升比較小,所以沒有必要將所有的表的schema進行修改,但是應(yīng)該盡量避免設(shè)計成可為null的列
int(1)定義的長度影響寫入的長度?
這里的int(1)插入123可以成功的,只要不超過int類型的表示范圍-2^31 - 2^31-1,所以說字段括號的長度是沒有意義的,不影響寫入長度。
varchar(5)與varchar(255)保存同樣的內(nèi)容,有區(qū)別?
我們知道,varchar(n) ,n<=255使用額外一個字節(jié)保存長度,n>255使用額外兩個字節(jié)保存長度。實際上,兩者的硬盤存儲空間相同,但內(nèi)存空間占用不同,是括號的指定大小,因為將行從存儲引擎層復(fù)制到SQL層時,varchar將轉(zhuǎn)換為字段char以獲得利用固定寬度行的優(yōu)勢,因此,內(nèi)存中的字符串將填充到聲明的varchar列的最大長度。
具體可以查閱,MySQL官方文檔:https://dev.mysql.com/doc/refman/5.7/en/data-types.html
MySQL5.0.3版本之后varchar類型的變化
1)、MySQL 5.0.3 之前:0-255字節(jié),如:varchar(20)中的20表示字節(jié)數(shù),如果存放utf-8編碼的話只能放6個漢字。varchar(n),這里的n表示字節(jié)數(shù)。
MySQL 5.0.3 之后:0-65535字節(jié),varchar(20)表示字符數(shù),不管什么編碼,既漢字也能放20個。但最多占65532字節(jié)(兩個字節(jié)存放長度,小于255字節(jié)用1個字節(jié)存放長度),varchar(n)這里的n表示
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫常見字段類型長度匯總的文章就介紹到這了,更多相關(guān)MySQL常見字段類型長度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql事項,視圖,函數(shù),觸發(fā)器命令(詳解)
下面小編就為大家?guī)硪黄狹ysql事項,視圖,函數(shù),觸發(fā)器命令(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GR
這篇文章主要介紹了解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated問題,需要的朋友可以參考下2019-10-10Mysql應(yīng)用安裝后找不到my.ini文件的解決過程
剛剛在修改mysql默認配置的時候,發(fā)現(xiàn)找不到my.ini文件,下面這篇文章主要給大家介紹了關(guān)于Mysql應(yīng)用安裝后找不到my.ini文件的解決過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-08-08MySQL實現(xiàn)定時自動備份的流程步驟(Windows環(huán)境)
這篇文章主要介紹了MySQL實現(xiàn)定時自動備份的流程步驟(Windows環(huán)境),文中通過圖文結(jié)合的方式介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12解決阿里云ECS服務(wù)器下安裝MySQL無法遠程連接的問題
這篇文章介紹了解決阿里云ECS服務(wù)器安裝MySQL無法遠程連接的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07一文了解mysql索引的數(shù)據(jù)結(jié)構(gòu)為什么要用B+樹
這篇文章主要介紹了一文了解mysql索引的數(shù)據(jù)結(jié)構(gòu)為什么用B+樹,在節(jié)點中存儲某段數(shù)據(jù)的首地址,并且B+樹的葉子節(jié)點用了一個鏈表串聯(lián)起來,便于范圍查找,下文利用各種索引的數(shù)據(jù)結(jié)構(gòu)的方法與B+樹做對比,看看它的優(yōu)勢到底是什么,感興趣的小伙伴可以參考一下2022-04-04