mysql在创建表时会默认增加一个row_format的字段,这个字段表明了innodb存储引擎存储文件时所使用的行的格式。很早之前innodb只有一种行记录格式,所以不需要为文件格式命名,后来随着innodb的发展,文件格式逐渐多了,所以便有了row_format。

    之前的文件格式:antelope。mysql5.6默认使用的文件格式,支持两种行格式,compact以及redundant。
    现在的文件格式:barracuda。mysql5.7默认使用的文件格式,支持compressed以及dynamic两种格式。

    row format 紧凑存储 可变长度存储增强 支持较长前缀索引 支持压缩 支持的表空间类型 对应的文件格式类型
    redundant system,
    file-per-table,
    general
    antelope,
    barracuda
    compact system,
    file-per-table,
    general
    antelope,
    barracuda
    dynamic system,
    file-per-table,
    general
    barracuda
    compressed file-per-table,
    general
    barracuda

    redundant行格式是最基本的行格式,compact会比redundant格式节省约20%的空间,但对于某些操作会消耗
    更多的cpu。redundant与compact的行格式都只能支持768个字节的索引。
    dynamic行格式与compact行格式的存储基本相同,但是提高了可变长度字段的存储以及支持更大的前缀索引,会扩展到3072个字节。支持更大的前缀索引的行为由innodb_large_prefix这个变量控制,默认打开。compressed行格式的存储方式与dynamic的一致,但是提供了表跟索引数据的压缩功能。

    表的默认的row format由innodb_default_row_format变量控制,默认是dynamic。innodb_default_row_format只有三个枚举值,redundant,compact,dynamic。compressed不支持,因为system类型的表空间不支持compressed。