整數類型 標準 SQL 中支持 INTEGER 和 SMALLINT 這兩種類型,MySQL 資料庫除了支持這兩種類型以外,還擴展支持了 TINYINT、MEDIUMINT 和 BIGINT 整數類型 位元組數 無符號數的取值範圍 有符號數的取值範圍 TINYINT 1 (0,255) (-128,1 ...
整數類型
標準 SQL 中支持 INTEGER 和 SMALLINT 這兩種類型,MySQL 資料庫除了支持這兩種類型以外,還擴展支持了 TINYINT、MEDIUMINT 和 BIGINT
整數類型 | 位元組數 | 無符號數的取值範圍 | 有符號數的取值範圍 |
---|---|---|---|
TINYINT | 1 | (0,255) | (-128,127) |
SMALLINT | 2 | (0,65535) | (-32768,32767) |
MEDIUMINT | 3 | (0,16777215) | (-8388608,8388607) |
INT | 4 | (0,4294967295) | (-2147483648,2147483647) |
INTEGER | 4 | (0,4294967295) | (-2147483648,2147483647) |
BIGINT | 8 | (0,18446744073709551615) | (-9223372036854775808,9223372036854775807) |
浮點數類型和定點數類型
數據表中用浮點數類型和定點數類型來表示小數,浮點數類型包括單精度浮點數(FLOAT)和雙精度浮點數(DOUBLE),定點數類型就是 DECIMAL
類型 | 位元組數 | 負數的取值範圍 | 非負數的取值範圍 |
---|---|---|---|
FLOAT | 4 | (-3.402823466E+38,-1.175494351E-38) | 0,(1.175494351E-38,3.402 823466E+38) |
DOUBLE | 4 | (-1.7976931348623157E+308,-2.2250738585072014E-308) | 0,(2.2250738585072014E-308,1.7976931348623157 E+308) |
DECIMAL(M,D) | M+2 | 取決於 M 和 D | 取決於 M 和 D |
FLOAT 和 DOUBLE 類型存儲數據時存儲的是近似值,DECIMAL 存儲的是字元串,因此提供了更高的精度。在金融系統中,表示貨幣金額的時候會優先考慮 DECIMAL 類型;在一般的價格體系,比如購物平臺的商品標價,一般用 FLOAT 類型即可
日期和時間類型
每種日期與時間類型都有一個有效範圍如果插入的值超過這個範圍,系統就會報錯,並將零值插入到資料庫
類型 | 位元組數 | 取值範圍 | 零值 |
---|---|---|---|
YEAR | 1 | 1901 ~ 2155 | 0000 |
DATE | 4 | 1000-01-01 ~ 9999-12-31 | 0000:00:00 |
TIME | 3 | -838:59:59 ~ 838:59:59 | 00-00-00 |
DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 19700101080001 ~ 2038011911407 | 00000000000000 |
字元串類型
1. CHAR 和 VARCHAR 類型
CHAR 類型和 VARCHAR 類型都在創建表時指定了最大長度,CHAR 類型的長度是固定的,其長度可以是 0 ~ 255 的任意值。而 VARCHAR 類型的長度是可變的,其最大值可以取 0 ~ 65535 之間的任意值,VARCHAR 類型實際占用的空間為字元串的實際長度加一,這樣可以有效節約系統的空間
2. TEXT 類型
TEXT 類型是一種特殊的字元串類型,各種 TEXT 類型的區別在於允許的長度和存儲空間不同
類型 | 允許的長度 | 存儲空間 |
---|---|---|
TINYTEXT | 0-255 | 值的長度+2個位元組 |
TEXT | 0-65535 | 值的長度+2個位元組 |
MEDIUMTEXT | 0-16772150 | 值的長度+3個位元組 |
LONGTEXT | 0-4294967295 | 值的長度+4個位元組 |
3. ENUM 類型
ENUM 類型又稱枚舉類型,在創建表時,ENUM 類型的取值範圍以列表的形式指定
屬性名 ENUM('值1', '值2', ..., '值n')
- 屬性名:指欄位的名稱
- 值n:表示列表中的第 n 個值
ENUM 類型的值只能取列表中的某一個元素,取值列表最多能有 65535 個值。列表中的每個值獨有一個順序排列的編號,MySQL 存入的是這個編號,而不是列表中的值
如果 ENUM 類型加上了 NOT NULL 屬性,其預設值為取值列表的第一個元素。如果不加 NOT NULL 屬性,ENUM 類型將允許插入 NULL,而且 NULL 為預設值
4. SET 類型
在創建表時,SET 類型的取值範圍就以列表的形式指定了
屬性名 SET('值1', '值2', ..., '值n')
參數和 ENUM 一致,SET 類型的值可以取列表中的一個或多個元素,取多個元素時,不同元素之間用逗號隔開,SET 類型的值最多只能是由 64 個元素構成的組合
二進位類型
二進位型是存儲二進位數據的數據類型
類型 | 取值範圍 |
---|---|
BINARY(M) | 位元組數為M,允許長度為0~M的定長二進位字元串 |
VARBINARY (M) | 允許長度為0~M的變長二進位字元串,位元組數為值的長度加1 |
BIT(M) | M位二進位數據,M最大值為64 |
TINYBLOB | 可變長二進位數據,最多255個位元組 |
BLOB | 可變長二進位數據,最多(2^16-1)個位元組 |
MEDIUMBLOB | 可變長二進位數據,最多(2^24-1)個位元組 |
LONGBLOB | 可變長二進位數據,最多(2^32-1)個位元組 |
1. BINARY 和 VARBINARY 類型
BINARY 類型的長度是固定的,不足最長長度的空間有 '\0' 補全
VARBINARY 類型的長度是可變的,在最大範圍內使用多少就分配多少
2. BIT 類型
例如,BIT(4) 就是指定數據類型為 BIT 類型,長度為 4,若存儲的數據是 0 ~ 15,因為變成二進位後的 15 的值為 1111,則其長度為 4。如果插入的值為 16,其二進位數為 10000,長度為 5 超過最大長度,則插入失敗
3. BLOB 類型
BLOB 用來保存數據量很大的二進位數據,如圖片等。BLOB 類型與 TEXT 類型類似,不同在於 BLOB 類型用於存儲二進位數據,根據其二進位編碼進行比較和排序,而 TEXT 類型是以文本模式進行比較和排序的
JSON 類型
在 MySQL 中,JSON 值是以字元串形式寫入的,MySQL 會對字元串進行解析,如果不符合 JSON 格式,那麼寫入將失敗
名稱 | 描述 |
---|---|
json_array() | 創建json數組 |
json_array_append() | 數組尾部追加元素 |
json_array_insert() | 在數組的指定位置插入元素 |
json_extract() / -> / ->> | 根據條件提取文檔中的數據 |
json_contains(target,candidate[,path]) | 查詢文檔中是否包含指定的元素 |
json_contains_path() | 查詢文檔中是否包含指定的路徑 |
json_depth() | json文檔的深度(元素最大嵌套層數) |
json_insert() | 向json文檔插入值 |
json_keys() | 提取json中的鍵值為json數組 |
json_length() | json文檔的長度(元素的個數) |
json_merge() / json_merge_preserve() | 將兩個文檔合併,保留重覆鍵值 |
json_merge_patch() | 將兩個文檔合併,替換重覆鍵值 |
json_object() | 創建json對象 |
json_pretty() | 美化json格式 |
json_quote() / json_unquote() | 加上/去掉json文檔兩邊的雙引號 |
json_remove() | 刪除文檔中指定位置的元素 |
json_replace() | 替換文檔中指定位置的元素 |
json_search() | 返回所有符合條件的路徑集合 |
json_set() | 給文檔中指定位置的元素設置新值 |
json_storage_free() | json文檔更新操作後的剩餘空間 |
json_storage_size() | json文檔占用的存儲空間 |
json_table() | 將json文檔轉換為表格 |
json_type() | json文檔類型(數組/對象/標量) |
json_valid() | json格式是否合法 |
Spatial 數據類型
Spatial 數據即空間數據,又稱幾何數據,表示物體的位置、形態、大小分佈等各方面信息
MySQL 包含的空間數據類型有幾何體(GEOMETRY)、點(POINT)、線(LINESTRING)和多邊形(POLYGON),其中幾何體可以存儲任何類型的幾何數據,而其他三種只能存儲對應類型的幾何數據