MySQL 數(shù)據(jù)類型之字符串、數(shù)字、日期詳解
MySQL 數(shù)據(jù)類型詳解:字符串、數(shù)字、日期
在 MySQL 中,選擇合適的數(shù)據(jù)類型對于數(shù)據(jù)庫的存儲(chǔ)效率和查詢性能至關(guān)重要。MySQL 提供了**字符串(String)、數(shù)字(Numeric)和日期(Date & Time)**三大類數(shù)據(jù)類型,每種類型又有不同的子類型,以適應(yīng)不同的業(yè)務(wù)需求。
1. 字符串(String)數(shù)據(jù)類型
字符串類型用于存儲(chǔ)文本數(shù)據(jù),主要分為定長(CHAR)和變長(VARCHAR),以及大文本(TEXT 和 BLOB)。
1.1 定長與變長字符串
數(shù)據(jù)類型 | 存儲(chǔ)方式 | 特點(diǎn) | 適用場景 |
---|---|---|---|
CHAR(n) | 定長存儲(chǔ)(不足補(bǔ)空格) | 訪問速度快,占用空間固定 | 適用于固定長度的數(shù)據(jù),如國家代碼、身份證號 |
VARCHAR(n) | 變長存儲(chǔ)(按需分配空間) | 節(jié)省存儲(chǔ)空間,但查詢時(shí)可能需要額外的存儲(chǔ)開銷 | 適用于長度不固定的文本,如用戶昵稱、電子郵件 |
CHAR vs. VARCHAR
- CHAR(10) 始終占用 10 個(gè)字節(jié)(不足補(bǔ)空格)。
- VARCHAR(10) 只存儲(chǔ)實(shí)際字符,最多 10 個(gè)字節(jié),并額外占用 1-2 字節(jié)用于存儲(chǔ)長度信息。
一般來說:
- 短小、長度固定的文本(如國家代碼、MD5 哈希)用
CHAR
。 - 長度不固定的文本(如姓名、地址)用
VARCHAR
。
1.2 TEXT 和 BLOB
當(dāng)存儲(chǔ)較長的文本或二進(jìn)制數(shù)據(jù)時(shí),使用 TEXT 和 BLOB 類型:
數(shù)據(jù)類型 | 最大存儲(chǔ)大小 | 是否區(qū)分大小寫 | 適用場景 |
---|---|---|---|
TINYTEXT | 255 字節(jié) | ? 區(qū)分大小寫 | 短文本,如推文內(nèi)容 |
TEXT | 65,535 字節(jié)(64KB) | ? 區(qū)分大小寫 | 文章內(nèi)容、評論 |
MEDIUMTEXT | 16,777,215 字節(jié)(16MB) | ? 區(qū)分大小寫 | 書籍、日志記錄 |
LONGTEXT | 4GB | ? 區(qū)分大小寫 | 超長文本,如百科條目 |
TINYBLOB | 255 字節(jié) | ? 不區(qū)分大小寫 | 小二進(jìn)制數(shù)據(jù),如圖片縮略圖 |
BLOB | 64KB | ? 不區(qū)分大小寫 | 圖片、音頻 |
MEDIUMBLOB | 16MB | ? 不區(qū)分大小寫 | 大型媒體文件 |
LONGBLOB | 4GB | ? 不區(qū)分大小寫 | 超大文件,如電影 |
TEXT vs. VARCHAR
TEXT
不支持 默認(rèn)值,也無法使用 索引(僅支持前綴索引),但可以存儲(chǔ)大量文本。VARCHAR
可以索引整個(gè)字段,適用于需要頻繁搜索的文本字段。
2. 數(shù)字(Numeric)數(shù)據(jù)類型
數(shù)字類型用于存儲(chǔ)整數(shù)或小數(shù),主要分為整數(shù)類型和浮點(diǎn)/定點(diǎn)類型。
2.1 整數(shù)類型
數(shù)據(jù)類型 | 存儲(chǔ)大小 | 取值范圍(無符號) | 適用場景 |
---|---|---|---|
TINYINT | 1 字節(jié) | 0 ~ 255 | 布爾值(0/1)、評分 |
SMALLINT | 2 字節(jié) | 0 ~ 65,535 | 小范圍數(shù)值,如年齡 |
MEDIUMINT | 3 字節(jié) | 0 ~ 16,777,215 | 適用于 ID、自增字段 |
INT(INTEGER) | 4 字節(jié) | 0 ~ 4,294,967,295 | 適用于大部分場景,如用戶 ID |
BIGINT | 8 字節(jié) | 0 ~ 18,446,744,073,709,551,615 | 適用于超大數(shù)值,如銀行賬戶余額 |
無符號(UNSIGNED) vs. 有符號
TEXT
不支持 默認(rèn)值,也無法使用 索引(僅支持前綴索引),但可以存儲(chǔ)大量文本。VARCHAR
可以索引整個(gè)字段,適用于需要頻繁搜索的文本字段。
2. 數(shù)字(Numeric)數(shù)據(jù)類型
數(shù)字類型用于存儲(chǔ)整數(shù)或小數(shù),主要分為整數(shù)類型和浮點(diǎn)/定點(diǎn)類型。
2.1 整數(shù)類型
數(shù)據(jù)類型 | 存儲(chǔ)大小 | 取值范圍(無符號) | 適用場景 |
---|---|---|---|
TINYINT | 1 字節(jié) | 0 ~ 255 | 布爾值(0/1)、評分 |
SMALLINT | 2 字節(jié) | 0 ~ 65,535 | 小范圍數(shù)值,如年齡 |
MEDIUMINT | 3 字節(jié) | 0 ~ 16,777,215 | 適用于 ID、自增字段 |
INT(INTEGER) | 4 字節(jié) | 0 ~ 4,294,967,295 | 適用于大部分場景,如用戶 ID |
BIGINT | 8 字節(jié) | 0 ~ 18,446,744,073,709,551,615 | 適用于超大數(shù)值,如銀行賬戶余額 |
無符號(UNSIGNED) vs. 有符號
- 默認(rèn)情況下整數(shù)是有符號的(即支持負(fù)數(shù))。
UNSIGNED
關(guān)鍵字可以使整數(shù)僅存儲(chǔ)非負(fù)數(shù),從而擴(kuò)大可用范圍。
CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY );
2.2 浮點(diǎn)與定點(diǎn)類型
數(shù)據(jù)類型 | 存儲(chǔ)大小 | 適用場景 |
---|---|---|
FLOAT(M, D) | 4 字節(jié) | 適用于非嚴(yán)格精度的計(jì)算,如游戲評分 |
DOUBLE(M, D) | 8 字節(jié) | 高精度計(jì)算,如科學(xué)計(jì)算 |
DECIMAL(M, D)(NUMERIC) | 可變 | 財(cái)務(wù)計(jì)算,避免精度丟失 |
FLOAT vs. DECIMAL
FLOAT/DOUBLE 使用二進(jìn)制存儲(chǔ),可能導(dǎo)致精度誤差:
SELECT 0.1 + 0.2; -- 結(jié)果可能不是 0.3
DECIMAL 采用字符串存儲(chǔ),不會(huì)丟失精度:
CREATE TABLE transactions ( amount DECIMAL(10,2) NOT NULL );
建議:
- 財(cái)務(wù)類數(shù)據(jù)使用
DECIMAL
,避免計(jì)算誤差。 - 非關(guān)鍵計(jì)算(如統(tǒng)計(jì)數(shù)據(jù))可使用
FLOAT
或DOUBLE
。
3. 日期與時(shí)間(Date & Time)
MySQL 提供多個(gè)日期時(shí)間類型:
數(shù)據(jù)類型 | 存儲(chǔ)大小 | 適用場景 |
---|---|---|
FLOAT(M, D) | 4 字節(jié) | 適用于非嚴(yán)格精度的計(jì)算,如游戲評分 |
DOUBLE(M, D) | 8 字節(jié) | 高精度計(jì)算,如科學(xué)計(jì)算 |
DECIMAL(M, D)(NUMERIC) | 可變 | 財(cái)務(wù)計(jì)算,避免精度丟失 |
DATETIME vs. TIMESTAMP
- TIMESTAMP 受時(shí)區(qū)影響,適合存儲(chǔ)事件發(fā)生時(shí)間。
- DATETIME 不受時(shí)區(qū)影響,適合存儲(chǔ)固定時(shí)間。
CREATE TABLE events ( event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
4. 選擇數(shù)據(jù)類型的最佳實(shí)踐
- 能用整數(shù)就不要用字符串(如性別可用
TINYINT
)。 - 存儲(chǔ)金額、財(cái)務(wù)數(shù)據(jù)時(shí),使用
DECIMAL
而非FLOAT
。 - 短文本(<255 字符)用
VARCHAR
,長文本用TEXT
。 - 索引字段盡量避免
TEXT
和BLOB
,影響查詢性能。 - 時(shí)間戳數(shù)據(jù)盡量使用
TIMESTAMP
代替DATETIME
,節(jié)省存儲(chǔ)空間。
總結(jié)
MySQL 提供了多種數(shù)據(jù)類型,每種類型都有其適用場景。合理選擇數(shù)據(jù)類型可以提升存儲(chǔ)效率、優(yōu)化查詢性能,并避免精度損失。希望這篇文章能幫助你在數(shù)據(jù)庫設(shè)計(jì)時(shí)做出更好的選擇!??
到此這篇關(guān)于MySQL 數(shù)據(jù)類型詳解:字符串、數(shù)字、日期的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL數(shù)據(jù)庫數(shù)據(jù)類型的注意點(diǎn)和應(yīng)用實(shí)例
- MySQL中Bit數(shù)據(jù)類型的使用方式
- 淺談MySQL中用什么數(shù)據(jù)類型存IP地址
- 關(guān)于Mysql中json數(shù)據(jù)類型的查詢操作指南
- MySQL數(shù)據(jù)類型之淺談字符串(string)
- MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則
- MySQL 生成隨機(jī)數(shù)字、字符串、日期、驗(yàn)證碼及 UUID的方法
- 在MySQL中按字符串中的數(shù)字排序的詳細(xì)教程
- 詳解mysql中字符串轉(zhuǎn)為數(shù)字的三種方法
相關(guān)文章
Mysql中返回一個(gè)數(shù)據(jù)庫的所有表名,列名數(shù)據(jù)類型備注
在Mysql中怎樣返回一個(gè)數(shù)據(jù)庫的所有表名,列名數(shù)據(jù)類型備注2010-04-04windows系統(tǒng)mysql5.7.18安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了windows系統(tǒng)下mysql5.7.18安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)的相關(guān)資料,在MySQL 數(shù)據(jù)庫中進(jìn)行復(fù)雜的查詢語句,例如對多個(gè)字段進(jìn)行篩選和排序,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01關(guān)于mysql delete的問題小結(jié)
關(guān)于mysql delete的問題,需要的朋友可以參考下。2011-05-05mysql根據(jù)逗號將一行數(shù)據(jù)拆分成多行數(shù)據(jù)
本文主要介紹了mysql根據(jù)逗號將一行數(shù)據(jù)拆分成多行數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12