MySQL 的數(shù)據(jù)類型(2)
這一小節(jié)我們繼續(xù)學(xué)習(xí) MySQL 數(shù)據(jù)庫的數(shù)據(jù)類型上一小節(jié)學(xué)習(xí)了整數(shù)類型和浮點(diǎn)類型,本小節(jié)介紹日期時(shí)間類型和字符串類型。
1.日期和時(shí)間類型
| 類型 | 大小 | 格式 | 范圍 |
|---|---|---|---|
| date | 3字節(jié) | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 |
| time | 3-6字節(jié) | HH::MM:SS[.微秒] | -838:59:59 ~ 838:59:59 |
| year | 1字節(jié) | YYYY | 1901 ~ 2155 |
| datetime | 5-8字節(jié) | YYYY-MM-DD HH:MM:SS[.微秒值] | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC |
| timestamp | 4-7字節(jié) | YYYY-MM-DD HH:MM:SS[.微秒值] | 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC |
1.1 date
date 類型為日期類型,存儲空間 3個(gè)字節(jié),格式為 “YYYY-MM-DD”,例如 “2020-03-16”,日期的范圍 “1000-01-01 ~ 9999-12-31”,通常只想用來存儲如 “2020-02-02” 這種格式的日期字段時(shí),可以選擇使用 date 類型。
1.2 time
time 類型為時(shí)間類型,存儲空間 3 ~ 6個(gè)字節(jié),格式為 “HH::MM:SS[.微秒]” ,例如 “04:31:22.33”,范圍 “-838:59:59 ~ 838:59:59”,通常只想用來存儲如 “04:31:22.33” 這種格式的時(shí)間字段時(shí),可以選擇使用 time 類型。
1.3 year
year 類型為日期類型,存儲空間 1 個(gè)字節(jié) ,例如 “2020”,范圍 “1901 ~ 2155”,通常只想用來存儲如 “2020” 這種格式的日期字段時(shí),可以選擇使用 year 類型。
1.4 datetime
datetime 類型為精確時(shí)間的日期類型,存儲空間為 5 ~ 8 個(gè)字節(jié),格式為 “YYYY-MM-DD HH:MM:SS[.微秒值]”,例如 “2020-02-02 02:02:02.02”,范圍 “1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC”,通常只想用來存儲如 “2020-02-02 02:02:02.02” 這種格式的日期字段時(shí),可以選擇使用 datetime 類型。
1.5 timestamp
timestamp 類型保存了從1970年01月01日午夜以來的秒數(shù),它和 UNIX 時(shí)間戳相同,存儲空間 4 ~ 7 個(gè)字節(jié),范圍 “1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC”,timestamp 顯示的值依賴于時(shí)區(qū),和 datetime 相比,前者提供的值與時(shí)區(qū)有關(guān)系,后者則保留文本表示的日期和時(shí)間。
2.字符串類型
| 類型 | 范圍 | 說明 |
|---|---|---|
| char | 1~255個(gè)字節(jié) | 固定長度 |
| varchar | 字段存儲所占字節(jié)數(shù)不能超過65535字節(jié) | 可變長度 |
| tinytext | 最大長度255字節(jié) | 可變長度 |
| text | 最大長度65535個(gè)字節(jié) | 可變長度 |
| mediumtext | 最大長度16777215個(gè)字節(jié) | 可變長度 |
| longtext | 最大長度4294967295個(gè)字節(jié) | 可變長度 |
2.1 char
char 類型為定長字符串類型,適合存儲很短的字符串,或者所有值都接近同一個(gè)長度,例如存儲密碼 md5 值,因?yàn)樗且粋€(gè)定長的值,對于經(jīng)常變更的數(shù)據(jù),char 比 varchar 更好,因?yàn)槎ㄩL的 char 不容易產(chǎn)生碎片。
2.2 varchar
varchar 類型用于存儲可變長度字符串,是最常見的字符串?dāng)?shù)據(jù)類型,對于短長度的字符串,它比定長的更為節(jié)省空間,varchar 節(jié)省空間對性能有幫助,varchar 類型的字符串有如下特點(diǎn) :
- 字符串列的最大長度比平均長度大;
- 列的更新少,碎片問題較??;
- 使用了如 “UTF-8” 字符集,每個(gè)字符都使用不同的字節(jié)數(shù)來存儲。
2.3 text
text 數(shù)據(jù)類型家族包括 : tinytext、text、mediumtext、longtext。 MySQL 把每個(gè) text 值當(dāng)做一個(gè)獨(dú)立的對象處理。若 text 家族的值太大時(shí),InnoDB 存儲引擎會額外使用存儲區(qū)域來進(jìn)行存儲,通常存儲文章這樣比較長的內(nèi)容字段時(shí),可選擇 text 家族類型。
3.枚舉值類型
| 類型 | 范圍 | 說明 |
|---|---|---|
| enum | 幾何數(shù)最大65535 | 枚舉值類型,只能插入列表中指定的值 |
3.1 enum
enum 類型為枚舉值類型,有時(shí)可以使用枚舉值替代字符串,枚舉列可以把一些不重復(fù)的字符串存儲為一個(gè)預(yù)定義的集合。 MySQL 在存儲枚舉時(shí)非常緊湊,會根據(jù)列表值的數(shù)量壓縮到 1 ~ 2 個(gè)字節(jié),例如 ENUM (‘黃色’,‘黑色’,‘藍(lán)色’,‘紫色’),枚舉值類型字段的需求也可以使用 tinyint 類型來替代。
4.二進(jìn)制類型
| 類型 | 范圍 | 說明 |
|---|---|---|
| tinyblob | 最大長度255字節(jié) | 可變長度 |
| blob | 最大長度65535個(gè)字節(jié) | 可變長度 |
| mediumblob | 最大長度16777215個(gè)字節(jié) | 可變長度 |
| longblob | 最大長度4294967295個(gè)字節(jié) | 可變長度 |
4.1 blob
blob 數(shù)據(jù)類型家族包括 :tinybob、blob、mediumblob、longblob。和 text 家族一樣,MySQL 把每個(gè) text 值當(dāng)做一個(gè)獨(dú)立的對象處理。若 blob 家族的值太大時(shí),InnoDB 存儲引擎會額外使用存儲區(qū)域來進(jìn)行存儲,blob 類型存儲的是二進(jìn)制數(shù)據(jù),沒有排序規(guī)則或字符集。
5.小結(jié)
本小節(jié)主要介紹了 MySQL 日期時(shí)間類型和字符串類型,需要注意的是時(shí)間類型 TIME、DATETIME、TIMESTAMP 存儲大小具體取決于微秒值,例如 TIME 類型,當(dāng)微秒不存在的時(shí)候如 “12:12:12” 字節(jié)數(shù)為 3 字節(jié)(微秒 0 字節(jié))"12:12:12.72"表示微秒 2 位,總共4字節(jié)(微秒1字節(jié)),“12:12:12.6173” 表示微秒 4 位,總共 5 字節(jié)(微秒2字節(jié)),“12:12:12.627127” 表示微秒 6 位,總共 6 字節(jié),微秒字節(jié)位數(shù)對表如下:
| 微秒位數(shù) | 大小 | 舉例 |
|---|---|---|
| 0 | 0字節(jié) | 12:12:12 |
| 1,2 | 1字節(jié) | 12:12:12.3 或 12:12:12.32 |
| 3,4 | 2字節(jié) | 12:12:12.326 或 12:12:12.3653 |
| 5,6 | 3字節(jié) | 12:12:12.35812 或 12:12:12.352161 |
另外還需要注意 char 類型是一種固定長度的類型,varchar 則是一種可變長度的類型,它們的區(qū)別是:char(M) 類型的數(shù)據(jù)列里,每個(gè)值都占用 M 個(gè)字節(jié),如果某個(gè)長度小于 M,MySQL 就會在它的右邊用空格字符補(bǔ)足.。
愛因詩賢 ·
2025 imooc.com All Rights Reserved |