亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

MySQL 的數據類型(2)

這一小節我們繼續學習 MySQL 數據庫的數據類型上一小節學習了整數類型和浮點類型,本小節介紹日期時間類型和字符串類型。

1.日期和時間類型

類型 大小 格式 范圍
date 3字節 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
time 3-6字節 HH::MM:SS[.微秒] -838:59:59 ~ 838:59:59
year 1字節 YYYY 1901 ~ 2155
datetime 5-8字節 YYYY-MM-DD HH:MM:SS[.微秒值] 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC
timestamp 4-7字節 YYYY-MM-DD HH:MM:SS[.微秒值] 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC

1.1 date

date 類型為日期類型,存儲空間 3個字節,格式為 “YYYY-MM-DD”,例如 “2020-03-16”,日期的范圍 “1000-01-01 ~ 9999-12-31”,通常只想用來存儲如 “2020-02-02” 這種格式的日期字段時,可以選擇使用 date 類型。

1.2 time

time 類型為時間類型,存儲空間 3 ~ 6個字節,格式為 “HH::MM:SS[.微秒]” ,例如 “04:31:22.33”,范圍 “-838:59:59 ~ 838:59:59”,通常只想用來存儲如 “04:31:22.33” 這種格式的時間字段時,可以選擇使用 time 類型。

1.3 year

year 類型為日期類型,存儲空間 1 個字節 ,例如 “2020”,范圍 “1901 ~ 2155”,通常只想用來存儲如 “2020” 這種格式的日期字段時,可以選擇使用 year 類型。

1.4 datetime

datetime 類型為精確時間的日期類型,存儲空間為 5 ~ 8 個字節,格式為 “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” 這種格式的日期字段時,可以選擇使用 datetime 類型。

1.5 timestamp

timestamp 類型保存了從1970年01月01日午夜以來的秒數,它和 UNIX 時間戳相同,存儲空間 4 ~ 7 個字節,范圍 “1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC”,timestamp 顯示的值依賴于時區,和 datetime 相比,前者提供的值與時區有關系,后者則保留文本表示的日期和時間。

2.字符串類型

類型 范圍 說明
char 1~255個字節 固定長度
varchar 字段存儲所占字節數不能超過65535字節 可變長度
tinytext 最大長度255字節 可變長度
text 最大長度65535個字節 可變長度
mediumtext 最大長度16777215個字節 可變長度
longtext 最大長度4294967295個字節 可變長度

2.1 char

char 類型為定長字符串類型,適合存儲很短的字符串,或者所有值都接近同一個長度,例如存儲密碼 md5 值,因為它是一個定長的值,對于經常變更的數據,char 比 varchar 更好,因為定長的 char 不容易產生碎片。

2.2 varchar

varchar 類型用于存儲可變長度字符串,是最常見的字符串數據類型,對于短長度的字符串,它比定長的更為節省空間,varchar 節省空間對性能有幫助,varchar 類型的字符串有如下特點 :

  • 字符串列的最大長度比平均長度大;
  • 列的更新少,碎片問題較小;
  • 使用了如 “UTF-8” 字符集,每個字符都使用不同的字節數來存儲。

2.3 text

text 數據類型家族包括 : tinytext、text、mediumtext、longtext。 MySQL 把每個 text 值當做一個獨立的對象處理。若 text 家族的值太大時,InnoDB 存儲引擎會額外使用存儲區域來進行存儲,通常存儲文章這樣比較長的內容字段時,可選擇 text 家族類型。

3.枚舉值類型

類型 范圍 說明
enum 幾何數最大65535 枚舉值類型,只能插入列表中指定的值

3.1 enum

enum 類型為枚舉值類型,有時可以使用枚舉值替代字符串,枚舉列可以把一些不重復的字符串存儲為一個預定義的集合。 MySQL 在存儲枚舉時非常緊湊,會根據列表值的數量壓縮到 1 ~ 2 個字節,例如 ENUM (‘黃色’,‘黑色’,‘藍色’,‘紫色’),枚舉值類型字段的需求也可以使用 tinyint 類型來替代。

4.二進制類型

類型 范圍 說明
tinyblob 最大長度255字節 可變長度
blob 最大長度65535個字節 可變長度
mediumblob 最大長度16777215個字節 可變長度
longblob 最大長度4294967295個字節 可變長度

4.1 blob

blob 數據類型家族包括 :tinybob、blobmediumblob、longblob。和 text 家族一樣,MySQL 把每個 text 值當做一個獨立的對象處理。若 blob 家族的值太大時,InnoDB 存儲引擎會額外使用存儲區域來進行存儲,blob 類型存儲的是二進制數據,沒有排序規則或字符集。

5.小結

本小節主要介紹了 MySQL 日期時間類型字符串類型,需要注意的是時間類型 TIME、DATETIME、TIMESTAMP 存儲大小具體取決于微秒值,例如 TIME 類型,當微秒不存在的時候如 “12:12:12” 字節數為 3 字節(微秒 0 字節)"12:12:12.72"表示微秒 2 位,總共4字節(微秒1字節),“12:12:12.6173” 表示微秒 4 位,總共 5 字節(微秒2字節),“12:12:12.627127” 表示微秒 6 位,總共 6 字節,微秒字節位數對表如下:

微秒位數 大小 舉例
0 0字節 12:12:12
1,2 1字節 12:12:12.3 或 12:12:12.32
3,4 2字節 12:12:12.326 或 12:12:12.3653
5,6 3字節 12:12:12.35812 或 12:12:12.352161

另外還需要注意 char 類型是一種固定長度的類型,varchar 則是一種可變長度的類型,它們的區別是:char(M) 類型的數據列里,每個值都占用 M 個字節,如果某個長度小于 M,MySQL 就會在它的右邊用空格字符補足.。