MySQL的⽂件格式file_format与⾏格式row_format
MySQL的⽂件格式在5.7之前是只有Antelope(羚⽺)⼀种,在5.7之后新加了⼀种⽂件格式Barracuda(梭⼦鱼)。
所以MySQL的InnoDB引擎有两种⽂件格式:Antelope和Barracuda。
那怎么查询⽂件格式呢?如果查询不到说明是默认⽂件格式。
show variables like "innodb_file_format";
那怎么设置⽂件格式呢?设置为BARRACUDA需要开启INNODB_LARGE_PREFIX参数。
SET GLOBAL INNODB_LARGE_PREFIX = ON;
SET GLOBAL innodb_file_format = BARRACUDA;
接下来是⾏格式了。
Antelope⽂件格式包含:COMPACT 和 REDUNDANT。MySQL5.0之前是REDUNDANT,MySQL5.0之后是COMPACT格式。MySQL5.0之后默认是COMPACT格式。对于 Compact 和 Redundant ⾏格式,In
noDB将变长字段(VARCHAR, VARBINARY, BLOB 和 TEXT)的前786字节存储在B+树节点中,其余的数据存放在溢出页(off-page)
Barracuda⽂件格式包含:COMPRESSED 和 DYNAMIC。与这两个新的⾏格式相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最⼤长度为3072字节。对于COMPRESSED 和 DYNAMIC⾏格式,数据页中只存放20个字节的指针,实际的数据存放在Off Page中,之前的Compact 和 Redundant 两种格式会存放768个字前缀字节)。
⾏格式可以通过修改表来指定或者在创建表时指定。
ALTER TABLE tablename ROW_FORMAT=COMPRESSED;
mysql文档手机版在 msyql 5.7.9 及以后版本,默认⾏格式由innodb_default_row_format变量决定,它的默认值是DYNAMIC.
此时查询⾏格式可以使⽤SQL来查。如果查询不到说明是默认⾏格式。
SHOW variables like 'innodb_default_row_format';
如何进⾏显⽰设置⾏格式?
在MySQL5.7.9版本后,除了使⽤上⾯修改表可以设置⾏格式外,还可以指定参数设置。
SET GLOBAL innodb_default_row_format = dynamic;
低的MySQL版本没有这个参数会报错“1193 - Unknown system variable 'innodb_default_row_format'”。 值得注意的是字符编码会影响字段的最⼤长度。查看字符编码:
show variables like '%character%';
⽐如utf8mb4会限制索引字段的最⼤长度,执⾏报错
index column size too large. the maximum column size is 767 bytes
此时⽂件格式设置为BARRACUDA,并且ROW_FORMAT设置为DYNAMIC就OK了。
如果⾏不通。则把字符编码改回utf8。
参考:这两篇⽂章⽐较详细,可以仔细读⼀下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论