数字类型
日期类型
字符串类型
CHAR和VARCHAR
表列数和行大小限制
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` ( a VARCHAR(10000), b VARCHAR(10000), c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000), f VARCHAR(10000), g VARCHAR(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 or BLOBs > 时间: 0.004s
报错是因为最大行大小的限制是所有列共享,而不是对单独列的限制。
BINARY和VARBINARY
BLOB和TEXT
ENUM和SET
-- SET类型,元素个数最大为64个 CREATE TABLE `test_set` ( a SET('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` ( a SET('A','B','C'), b ENUM('男','女') ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO test_enum_set VALUES('A,B','男') > Affected rows: 1 > 时间: 0.009s
如果你插入的值不在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
数据类型存储要求
数字类型前面已经提到了,这里不再赘述。
时间类型
枚举和集合类型
如果你想要表格的文件,我已经打包好了:https://github.com/Mysakura/DataFiles
那个 .pos 文件可以导入https://www.processon.com/ 来查看