數據類型
https://www.sjkjc.com/mysql/varchar/
MySQL 中的數據類型包括以下幾個大類:
字符串類型
數字類型
日期和時間類型
二進制類型
地理位置數據類型
JSON 數據類型
MySQL 字符串數據類型
VARCHAR:純文本字符串,字符串長度是可變的。
CHAR: 純文本字符串,字符串長度是固定的。當實際字段內容小于定義的長度時,MySQL 會用空白空白符好補足。
VARBINARY:二進制字符串,字符串長度是可變的。
BINARY:二進制字符串,字符串長度是固定的。
TINYTEXT:二進制字符串,最大為 255 個字節。
TEXT:二進制字符串,最大為 65K。
MEDIUMTEXT:二進制字符串,最大為 16M。
LONGTEXT:二進制字符串,最大為 4G。
ENUM:枚舉;每個列值可以分配一個 ENUM 成員
SET:集合;每個列值可以分配零個或多個 SET 成員
MySQL 數字數據類型
數字又是一個常用的數據類型。如果我們要存儲年齡、金額等,需要用到數字數據類型。MySQL 支持 SQL 標準中所有的數字類型,包括整數和小數。
下表顯示了 MySQL 中數字相關的數據類型:
TINYINT:一個非常小的整數,最大為 1 個字節。
SMALLINT:一個小整數,最大為 2 個字節。
MEDIUMINT:一個中等大小的整數,最大為 3 個字節。
INT:標準整數,最大為 4 個字節。
BIGINT:一個大整數,最大為 8 個字節。
DECIMAL:一個定點數。
FLOAT:單精度浮點數,最大為 4 個字節。
DOUBLE:雙精度浮點數,最大為 8 個字節。
BI:按位存儲。
MySQL 日期和時間數據類型
MySQL 提供了豐富的日期和時間類型,這包括日期(DATE)、時間(TIME)、日期和時間(DATETIME)、時間戳(TIMESTAMP)、年份(YEAR)。其中時間戳(TIMESTAMP)數據類型,可以用于跟蹤表中一行的變化。
DATE:CCYY-MM-DD 格式的日期值
TIME:hh:mm:ss 格式的時間值
DATETIME:CCYY-MM-DD hh:mm:ss 格式的日期和時間值
TIMESTAMP:CCYY-MM-DD hh:mm:ss 格式的時間戳值
YEAR:CCYY 或 YY 格式的年份值
MySQL 二進制數據類型
MySQL 還支持存儲二進制的數據,比如圖片文件等。如果要存儲文件,就要用到 BLOB 類型。 BLOB 是 binary large object 的縮寫,意思是二進制大對象。
TINYBLOB:最大為 255 個字節。
BLOB:最大為 65K。
MEDIUMBLOB:最大為 16M。
LONGBLOB:最大為 4G。
MySQL 空間數據類型
GEOMETRY:任何類型的空間值
POINT:使用橫坐標和縱坐標表示的一個點
LINESTRING:一條曲線(一個或多個 POINT 值)
POLYGON:一個多邊形
GEOMETRYCOLLECTION:GEOMETRY 值的集合
MULTILINESTRING:LINESTRING 值的集合
MULTIPOINT:POINT 值的集合
MULTIPOLYGON:POLYGON 值的集合
JSON 數據類型
MySQL 從 5.7.8 版本開始支持 JSON 數據類型,允許您更有效地存儲和管理 JSON 文檔。與 JSON 格式的字符串相比,原生 JSON 數據類型提供有如下的優點:
自動驗證。MySQL 會對存儲在 JSON 列中的 JSON 文檔進行自動驗證,無效的文檔會產生錯誤。
最佳存儲格式。MySQL 會將存儲在 JSON 列中的 JSON 文檔轉換為允許快速讀取文檔元素的內部格式。
MySQL 布爾數據類型
MySQL 沒有內置布爾數據類型。但是,MySQL 支持 BOOLEAN 或 BOOL 關鍵字,MySQL 會將 BOOLEAN 或 BOOL 類型轉換為 TINYINT(1)。當我們插入 TRUE 或者 FALSE 時,MySQL 會存儲為 1 或者 0。
常用的類型解析
VARCHAR 語法
當我們使用 VARCHAR 數據類型時,我們需要指定一個最大的長度。其語法如下:
VARCHAR(max_length)
其中 max_length 是一個數值,它指示了此列的最大字符數。如果我們不指定此值,則默認值是 255。也就是說 VARCHAR 等同于 VARCHAR(255)。 VARCHAR 最多長度為 65535 個字節。
MySQL 存儲 VARCHAR 數值時,會將最前的 1 或者 2 個字節存儲為實際字符串內容的長度。如果列的值少于 255 個字節,則長度前綴為 1 個字節,否則為 2 個字節。
int用法
MySQL INT 類型使用起來簡單,如下:
INT [UNSIGNED]
這里: UNSIGNED 屬性標識了此數據類型為無符號整數。
有符號取值范圍為-2147483648~2147483647
無符號:0~4294967295
DECIMAL 類型介紹
DECIMAL 數據類型是定點數數據類型,用來存儲精確的樹枝,比如賬務金額等。底層實現上,MySQL 使用二進制形式存儲該類型的值
為了存儲精確的數值,我們需要為 DECIMAL 數據類型指定總位數和小數位數。這里是 DECIMAL 數據類型的語法:
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
這里:
M 是總的位數,不包含小數點和正負號。
D 是小數部分的位數。如果 D 為 0 則表示沒有小數部分。當 D 省略時,默認值為 0。
UNSIGNED 屬性表示數值是無符號的。無符號的數字不能是負數。
ZEROFILL 屬性表示當整數部分位數不足時,用整數的左側用 0 填充。帶有 ZEROFILL 的列將自動具有 UNSIGNED 屬性。這和 INT 數據類型一樣。
比如,我們定義了如下一個列:
amount DECIMAL(9, 4);
那么 amount 列的值的范圍是從 -99999.9999 到 99999.9999。