WL#8307: InnoDB: Make ROW_FORMAT=DYNAMIC the default

Status: Complete

We will introduce a new global variable innodb_default_row_format for specifying the default ROW_FORMAT. It will be DYNAMIC by default. Allowed values are REDUNDANT, COMPACT, and DYNAMIC. The value COMPRESSED is not allowed for this parameter, because restrictions exist around ROW_FORMAT=COMPRESSED.

The new default ROW_FORMAT will be innodb_default_row_format, replacing the old default COMPACT that was introduced in MySQL 5.0.3. Unlike COMPACT, the DYNAMIC allows large VARCHAR, TEXT and BLOB columns to be stored completely off page with only a 20-byte pointer in the clustered index record. The COMPACT format always stores either the full column in the clustered index record, or a 768-byte prefix followed by the 20-byte pointer.

As explained in WL#7703 it only made sense to block ‘too new’ InnoDB formats when old incompatible versions of MySQL were still supported. Now that MySQL 5.1 and older versions are no longer supported, there is no reason to restrict the use of ROW_FORMAT=DYNAMIC.

This change poses a conflict with tables in the system tablespace which before WL#6205 did not support ROW_FORMAT=DYNAMIC tables. WL#6205 allows CREATE TABLE…ROW_FORMAT=DYNAMIC TABLESPACE=innodb_system.

With this WL#8307, the innodb_file_format setting will be ignored when ROW_FORMAT=DYNAMIC is specified. It will still be consulted for ROW_FORMAT=COMPRESSED.