天天看點

mysql所有表資料條資料類型_MySQL8 全部資料類型

數字類型

mysql所有表資料條資料類型_MySQL8 全部資料類型

日期類型

mysql所有表資料條資料類型_MySQL8 全部資料類型

字元串類型

CHAR和VARCHAR

mysql所有表資料條資料類型_MySQL8 全部資料類型

表列數和行大小限制

MySQL每個表的硬限制為4096列,但對于給定的表,有效最大值可能更小。确切的列限制取決于幾個因素:

表的最大行大小限制列的數量(也可能是size),因為所有列的總長度不能超過此大小。

各列的存儲要求限制了适合給定最大行大小的列數。某些資料類型的存儲要求取決于存儲引擎,存儲格式和字元集等因素。

存儲引擎可能會施加額外的限制來限制表列數。例如, InnoDB每個表的限制為1017列。

即使存儲引擎能夠支援更大的行,MySQL表的内部限制最大行大小為65,535位元組。BLOB和TEXT列隻對行大小限制貢獻9到12個位元組,因為它們的内容與行的其餘部分分開存儲。

InnoDB中對innodb_page_size(4KB,8KB,16KB和32KB)的設定,表的最大行大小略小于半頁。例如,對于預設的16KB InnoDB頁面大小,最大行大小略小于8KB 。

比如:

--此時最大行大小為66000,大于規定的65535

CREATE TABLE`test_max_row_size` (

aVARCHAR(10000),

bVARCHAR(10000),

cVARCHAR(10000),

dVARCHAR(10000),

eVARCHAR(10000),

fVARCHAR(10000),

gVARCHAR(6000)

) ENGINE=InnoDB DEFAULT CHARSET=utf8> 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT orBLOBs> 時間: 0.004s

報錯是因為最大行大小的限制是所有列共享,而不是對單獨列的限制。

BINARY和VARBINARY

mysql所有表資料條資料類型_MySQL8 全部資料類型

BLOB和TEXT

mysql所有表資料條資料類型_MySQL8 全部資料類型

ENUM和SET

mysql所有表資料條資料類型_MySQL8 全部資料類型

--SET類型,元素個數最大為64個

CREATE TABLE`test_set` (

aSET('a001','a002','a003','a004','a005','a006','a007','a008','a009','a0010','a0011','a0012','a0013','a0014','a0015','a0016','a0017','a0018','a0019','a0020','a0021','a0022','a0023','a0024','a0025','a0026','a0027','a0028','a0029','a0030','a0031','a0032','a0033','a0034','a0035','a0036','a0037','a0038','a0039','a0040','a0041','a0042','a0043','a0044','a0045','a0046','a0047','a0048','a0049','a0050','a0051','a0052','a0053','a0054','a0055','a0056','a0057','a0058','a0059','a0060','a0061','a0062','a0063','a0064')

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

測試一下這兩個類型

CREATE TABLE`test_enum_set` (

aSET('A','B','C'),

b ENUM('男','女')

) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO test_enum_set VALUES('A,B','男')> Affected rows: 1

> 時間: 0.009s

mysql所有表資料條資料類型_MySQL8 全部資料類型

如果你插入的值不在set之列,報錯

INSERT INTO test_enum_set VALUES('D','男')> 1265 - Data truncated for column 'a' at row 1

> 時間: 0s

如果你插入的值不在enum之列,也報錯

INSERT INTO test_enum_set VALUES('C','人妖')> 1265 - Data truncated for column 'b' at row 1

> 時間: 0s

對于set而言,插入重複的會過濾掉,不然怎麼能叫set呢

INSERT INTO test_enum_set VALUES('A,A,A','女')> Affected rows: 1

> 時間: 0.008s

mysql所有表資料條資料類型_MySQL8 全部資料類型

資料類型存儲要求

數字類型前面已經提到了,這裡不再贅述。

時間類型

mysql所有表資料條資料類型_MySQL8 全部資料類型

枚舉和集合類型

mysql所有表資料條資料類型_MySQL8 全部資料類型