天天看點

MySQL 資料類型

MySQL 資料類型

???? 使用 MySQL 這麼長時間了,經常使用的情況時,除了自增主鍵和日期時間之外 ,能 Varchar 的基本上都給 Varchar 了。團隊内部還出現過 VARCHAR(2)、VARCHAT(4)、…、VARCHAT(2^N) 的情況,現在看來确實有點搞笑。

資料類型

數值類型

整數:tinyint、smallint、mediumint、int、bigint

小數:float、double、real、decimal

日期和時間類型:date、time、datetime、timestamp、year

字元串類型

字元串:char、varchat

大文本:tinytext、text、mediumtext、longtext

其他:enum、set

二進制類型:tinyblob、blob、mediumblob、longblob

空間資料類型:geometry、geometrycollection、point、linestring

JSON 資料類型

MySQL 資料類型
MySQL 資料類型

DECIMAL 範圍

這裡我複制一下官方文檔的解釋:

The declaration syntax for a DECIMAL column is DECIMAL(M,D). The ranges of values for the arguments are as follows: M is the maximum number of digits (the precision). It has a range of 1 to 65. D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M. If D is omitted, the default is 0. If M is omitted, the default is 10.

高精度的資料類型,常用來存儲交易相關的資料

decimal(M, D) 解釋:M 代表總精度(小數點前後數字總個數),D 代表刻度(小數點後的位數)。比如:decimal(5, 2) 表示存儲範圍為 -999.99~999.99

decimal(M, D) 範圍:1<= M <= 65、0 <= D <= 30

如果省略 D,預設值是 0。如果省略 M,預設值是 10

存儲空間變長(M+2 bytes)

MySQL 資料類型

包含兩位數年份值的日期是模糊的,因為世紀是未知的。MySQL 使用這些規則解釋兩位數的年值:

00~69 範圍内的年份值被轉換為 2000~2069

70~99 範圍内的年份值被轉換為 1970~1999

MySQL 資料類型
MySQL 資料類型

關于 char(M)、varchar(M) 和 text 的問題:

char(M) 和 varchar(M) 中 M 代表 字元個數,并不是位元組個數。當使用 UTF-8 時意味着可以插入 M 個字元,但實際會占用 M*3 個位元組

char(M) 不管實際值都會占用 M 個字元的空間,頁 varchar(M) 隻會占用實際字元應該占用的空間 +1,并且實際空間為 +1 <= M

超過 char(M) 和 varchar(M) 的 M 設定後,字元串會被截斷

char 的上限為 255 字元,varchar 和 text 的上限 65535 字元

char 在存儲的時候會截斷尾部的空格,varchar 和 text 不會

varchar 會使用 1~3 個位元組來存儲長度,而 text 不會

MySQL 資料類型

如上所述:

char 存定長,速度快,存在空間浪費的可能,會處理尾部空格,上限 255

varchar 存變長,速度慢,不存在空間浪費,不處理尾部空格,上限 65535,但是有存儲長度實際 65532 最大可用

text,存變長大資料,速度慢,不存在空間浪費,不處理尾部空格,上限 65535,會用額外空間存放資料長度,是以可以全部使用 65535

MySQL 資料類型

繼續閱讀