每表文件表空间的SQL压缩语法警告和错误
当innodb_strict_mode被使能(默认值),指定 ROW_FORMAT=COMPRESSED或 KEY_BLOCK_SIZE在CREATE TABLE或ALTER TABLE 语句如果产生以下错误 innodb_file_per_table被禁止。
ERROR 1031 (HY000): Table storage engine for 't1' doesn't have this option
注意
如果当前配置不允许使用压缩表,则不会创建该表。
如果innodb_strict_mode禁用,则在禁用时在or 语句中指定ROW_FORMAT=COMPRESSEDor 会产生以下警告 。 KEY_BLOCK_SIZECREATE TABLEALTER TABLEinnodb_file_per_table
mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------+
| Warning | 1478 | InnoDB: KEY_BLOCK_SIZE requires innodb_file_per_table. |
| Warning | 1478 | InnoDB: ignoring KEY_BLOCK_SIZE=4. |
| Warning | 1478 | InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table. |
| Warning | 1478 | InnoDB: assuming ROW_FORMAT=DYNAMIC. |
+---------+------+---------------------------------------------------------------+
常规表空间的SQL压缩语法警告和错误
如果FILE_BLOCK_SIZE在创建表空间时未为通用表空间定义该表空间,则该表空间不能包含压缩表。如果尝试添加压缩表,则返回错误,如以下示例所示:
mysql>CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
mysql>CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;
ERROR 1478 (HY000): InnoDB: Tablespace `ts1` cannot contain a COMPRESSED table
尝试将具有无效表的表添加 KEY_BLOCK_SIZE到常规表空间将返回错误,如以下示例所示:
mysql>CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;
mysql>CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=4;
ERROR 1478 (HY000): InnoDB: Tablespace `ts2` uses block size 8192 and cannot
contain a table with physical page size 4096
对于常规表空间, KEY_BLOCK_SIZE表的值必须等于FILE_BLOCK_SIZE表空间的值除以1024。例如,如果 FILE_BLOCK_SIZE表空间的值是8192,KEY_BLOCK_SIZE则表的值必须是8。
尝试将具有未压缩行格式的表添加到配置为存储压缩表的常规表空间中会返回错误,如以下示例所示:
mysql>CREATE TABLESPACE `ts3` ADD DATAFILE 'ts3.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;
mysql>CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts3 ROW_FORMAT=COMPACT;
ERROR 1478 (HY000): InnoDB: Tablespace `ts3` uses block size 8192 and cannot
contain a table with physical page size 16384
innodb_strict_mode不适用于常规表空间。通用表空间的表空间管理规则与严格独立执行 innodb_strict_mode。有关更多信息,请参见第13.1.21节“ CREATE TABLESPACE语句”。