MySQL數據類型詳解
按照官方的文檔(8.0) 分析,MySQL的數據類型大概可以分為五類:數值數據類型、日期和時間數據類型、字符串數據類型、空間數據類型、JSON數據類型

1、數值數據類型
1.1、整數
MySQL支持SQL表中整數integer(int)和smallint。作為一個可擴展標準,MySQL也支持整數tinyint、mediumint和bigint。
MySQL支持的整數存儲空間和范圍
1.2、定點數
定點數 自變量的值范圍可以表示為:DECIMAL(M,D)
m是最大位數(精度)。范圍是1到65。默認值為10
d是小數點右邊的位數(小數位數)。范圍是0到30,并且不能大于m。默認值為0
decimal的值使用二進制格式存儲,該格式將9個十進制數字打包為4個字節。每個值的整數和小數部分的存儲要求分別確定。九個數字的每個倍數需要4個字節,其余的剩余數字則需要4個字節的一部分。
當decimal(65, 0)時,支持最大范圍[-1065-1, 1065-1]
1.3、浮點數
浮點數有float(單精度)和double(雙精度)
浮點數可以和定點數一樣指定m和d,但是為了保證最大可能的可移植性,需要使用浮點數存儲的代碼應使用float或double precision,不規定精度或位數。
1.4、位類型
位類型(bit),它是用來存放二進制數據的,bit(1)表示存儲長度為1位的二進制數據。超出存儲長度會被直接截取。取值范圍[bit(1), bit(64)]
2、日期和時間數據類型
日期和時間數據類型用于表示時間值date、time、datetime、timestamp和year。
timestamp自動設置為最新修改的日期和時間,定義一個字段為timestamp,這個字段里的時間數據會隨其他字段修改的時候自動刷新,存放這條記錄最后被修改的時間
每個時間類型有一個有效值范圍和一個"零"值。
3、字符串類型
字符串數據類型char、varchar、binary、varbinary、blob、text、enum和set。
3.1、char和varchar
char(n)若存入字符數小于n,默認在后面補充空格,查詢的時候再將空格去掉。所以char類型存儲的字符串末尾不能有空格。
varchar的值是可變長度的字符串。長度可以指定為0到65535之間的值。有效最大長度 取決于最大行大小和所使用的字符集。
官方示例:
顯示在表最后一行中的值僅在不使用嚴格的SQL模式 時才適用,如果啟用了嚴格模式,則會報錯。
3.2、binary和varbinary
(binary、varbinary)和(char、varchar)類似,不同的是它們存儲二進制字節字符串而不是字符串。
binary(n) 若存入字符數小于n,默認在后面補充0x00,查詢的時候再去掉。
3.3、text和blob
blob是一個二進制大對象,可以容納可變數量的數據。tinyblob、blob、mediumblob和longblob這四個blob類型。僅在它們可以保存的值的最大長度上有所不同。
text的四個類型tinytext、text、mediumtext和longtext和blob的四種類型相對應。
blob值被視為二進制字符串(字節字符串)。它們具有binary字符集和排序規則,并且比較和排序基于列值中字節的數字值。
text值被視為非二進制字符串(字符字符串)。它們具有binary以外的字符集,并且根據字符集的排序規則對值進行排序和比較。
3.3、enum
enum是一個字符串對象,值是從允許輸入的列表中選擇的,這些值在表創建時在列規范中定義。
enum列表的最大數量為65535,每個值末尾的空格都會被刪除。
enum列表有not null屬性,其默認值為取值列表的第一個元素。
enum列表沒有not null,則enum類型將允許插入null,并且null為默認值。
enum列表中的每個值獨有一個順序排列的編號,MySQL會存入這個編號而不是對應的值。
3.4、set
set是可以具有零個或多個值的字符串對象,這些值在表創建時在列規范中定義。
set的最大數量為64,每個值末尾的空格都會被刪除。
取多個元素時,不同元素用逗號隔開。
大概可以理解為enum的多選版。
4、json數據類型
MySQL支持json定義的數據類型,該類型可有效訪問json(javaScript對象表示法)文檔中的數據。
自動驗證存儲在json列中的json文檔。無效的文檔會產生錯誤。
查詢性能的提升:查詢不需要遍歷所有字符串才能找到數據。
json存儲的數據不能是null,只能是json格式的數據
5、空間數據類型
注:沒有理解,拷貝部分官方的介紹。
空間數據類型有下面幾種:
GEOMETRY: 是層次結構的根類。可以存儲任何類型的幾何值。其他單值類型(POINT, LINESTRING和POLYGON)將其值限制為特定的幾何類型。
Point:(點)指的是代表坐標空間中單個位置的幾何類。
Curve: (曲線)是一種1維幾何對象,通常由一系列點表示。Curve的特殊子類定義了點之間的內插類型。Curve是一種非實例化類。
LineString: 是具有點之間線性內插特性的Curve。
Surface: 是一種2維幾何對象。它是一種非實例化類。其唯一的可實例化子類是Polygon。
Polygon: 是代表多邊幾何對象的平面Surface。它由單個外部邊界以及0或多個內部邊界定義,其中,每個內部邊界定義為Polygon中的1個孔。
GeometryCollection: 是由1個或多個任意類幾何對象構成的幾何對象。
MultiPoint: 是一種由Point元素構成的幾何對象集合。這些點未以任何方式連接或排序。
MultiCurve: 是一種由Curve元素構成的幾何對象集合。MultiCurve是一種非實例化類。
MultiLineString: 是一種由LineString元素構成的幾何對象集合。
MultiSurface: 是一種由Surface元素構成的幾何對象集合。MultiSurface是一種非實例化類。其唯一的可實例化子類是MultiPolygon。
MultiPolygon: 是一種由Polygon元素構成的幾何對象集合。
參考鏈接:MySQL的數據類型
MySQL 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。