如果未启用 Barracuda 文件格式,则在or语句中
指定ROW_FORMAT=COMPRESSEDor
会产生以下警告。您可以使用语句
查看它们。KEY_BLOCK_SIZECREATE
TABLEALTER TABLESHOW
WARNINGS
| 等级 | 代码 | 信息 |
|---|---|---|
| 警告 | 1478 | InnoDB: KEY_BLOCK_SIZE requires
innodb_file_per_table. |
| 警告 | 1478 | InnoDB: KEY_BLOCK_SIZE requires innodb_file_format=1 |
| 警告 | 1478 | InnoDB: ignoring
KEY_BLOCK_SIZE= |
| 警告 | 1478 | InnoDB: ROW_FORMAT=COMPRESSED requires
innodb_file_per_table. |
| 警告 | 1478 | InnoDB: assuming ROW_FORMAT=COMPACT. |
笔记:
默认情况下,这些消息只是警告,而不是错误,并且表是在没有压缩的情况下创建的,就好像没有指定选项一样。
启用时
innodb_strict_mode,MySQL 会为这些情况生成错误,而不是警告。如果当前配置不允许使用压缩表,则不会创建该表。
“非严格”行为允许您将
mysqldump文件导入不支持压缩表的数据库,即使源数据库包含压缩表。在这种情况下,MySQL 会创建表
ROW_FORMAT=COMPACT而不是阻止操作。
要将转储文件导入新数据库,并重新创建原始数据库中存在的表,请确保服务器具有正确的配置参数设置
innodb_file_format和
innodb_file_per_table.
仅当指定为
或省略KEY_BLOCK_SIZE时才允许
该属性。与任何其他
指定 a
会生成一条警告,您可以使用 查看。但是,该表未压缩;指定的被忽略)。
ROW_FORMATCOMPRESSEDKEY_BLOCK_SIZEROW_FORMATSHOW WARNINGSKEY_BLOCK_SIZE
| 等级 | 代码 | 信息 |
|---|---|---|
| 警告 | 1478 | InnoDB: ignoring KEY_BLOCK_SIZE= |
如果您在
innodb_strict_mode启用的情况下运行,则 aKEY_BLOCK_SIZE与除任何
ROW_FORMAT以外
的组合会COMPRESSED生成错误,而不是警告,并且不会创建表。
表 14.5,“ROW_FORMAT 和 KEY_BLOCK_SIZE 选项”
概述了与或
一起使用
的ROW_FORMAT和
选项。
KEY_BLOCK_SIZECREATE TABLEALTER TABLE
表 14.5 ROW_FORMAT 和 KEY_BLOCK_SIZE 选项
| 选项 | 使用说明 | 描述 |
|---|---|---|
ROW_FORMAT=REDUNDANT |
MySQL 5.0.3 之前使用的存储格式 | 效率低于ROW_FORMAT=COMPACT; 为了向后兼容 |
ROW_FORMAT=COMPACT |
自 MySQL 5.0.3 以来的默认存储格式 | 在聚簇索引页中存储前缀为 768 字节的长列值,其余字节存储在溢出页中 |
ROW_FORMAT=DYNAMIC |
仅适用于
innodb_file_format=Barracuda |
如果适合,则将值存储在聚簇索引页中;如果不是,则仅存储指向溢出页的 20 字节指针(无前缀) |
ROW_FORMAT=COMPRESSED |
仅适用于
innodb_file_format=Barracuda |
使用 zlib 压缩表和索引 |
KEY_BLOCK_SIZE= |
仅适用于
innodb_file_format=Barracuda |
指定 1、2、4、8 或 16 KB 的压缩页面大小;暗示
ROW_FORMAT=COMPRESSED |
表 14.6,“InnoDB 严格模式关闭时的 CREATE/ALTER TABLE 警告和错误”CREATE TABLE总结了or
语句
上配置参数和选项的某些组合发生的错误情况,
ALTER TABLE以及这些选项如何出现在SHOW TABLE
STATUS.
当innodb_strict_mode是
时OFF,MySQL 创建或更改表,但忽略某些设置,如下所示。您可以在 MySQL 错误日志中看到警告消息。当
innodb_strict_mode是
时ON,这些指定的选项组合会产生错误,并且不会创建或更改表。要查看错误情况的完整描述,请发出以下
SHOW ERRORS语句:示例:
mysql>CREATE TABLE x (id INT PRIMARY KEY, c INT)->ENGINE=INNODB KEY_BLOCK_SIZE=33333;ERROR 1005 (HY000): 无法创建表 'test.x' (errno: 1478) 数据库>SHOW ERRORS;+--------+------+-------------------------------- ----------+ | 级别 | 代码 | 留言 | +--------+------+-------------------------------- ----------+ | 错误 | 第 1478 章 InnoDB:无效的 KEY_BLOCK_SIZE=33333。| | 错误 | 1005 | 无法创建表“test.x”(错误号:1478)| +--------+------+-------------------------------- ----------+
表 14.6 InnoDB 严格模式关闭时的 CREATE/ALTER TABLE 警告和错误
| 句法 | 警告或错误情况 | 结果ROW_FORMAT,如图SHOW TABLE
STATUS |
|---|---|---|
ROW_FORMAT=REDUNDANT |
没有任何 | REDUNDANT |
ROW_FORMAT=COMPACT |
没有任何 | COMPACT |
ROW_FORMAT=COMPRESSED或
ROW_FORMAT=DYNAMIC或
KEY_BLOCK_SIZE指定 |
忽略,除非同时
启用
和innodb_file_format=Barracudainnodb_file_per_table |
COMPACT |
指定无效KEY_BLOCK_SIZE(不是 1、2、4、8 或 16) |
KEY_BLOCK_SIZE被忽略 |
请求的行格式,或COMPACT默认 |
ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE指定有效
|
没有任何; KEY_BLOCK_SIZE指定被使用 |
COMPRESSED |
KEY_BLOCK_SIZE指定为
REDUNDANT,COMPACT或
DYNAMIC行格式 |
KEY_BLOCK_SIZE被忽略 |
REDUNDANT,COMPACT或者
DYNAMIC |
ROW_FORMAT不是
REDUNDANT, COMPACT,
DYNAMIC或COMPRESSED |
如果被 MySQL 解析器识别则忽略。否则,将发出错误。 | COMPACT或不适用 |
时innodb_strict_mode,
ONMySQL 拒绝无效
ROW_FORMAT或KEY_BLOCK_SIZE
参数。为了与早期版本的 MySQL 兼容,默认情况下不启用严格模式;相反,MySQL 会针对忽略的无效参数发出警告(而非错误)。
KEY_BLOCK_SIZE使用
无法查看所选内容
SHOW TABLE
STATUS。该语句SHOW CREATE
TABLE显示KEY_BLOCK_SIZE
(即使它在创建表时被忽略)。MySQL无法显示表的真实压缩页大小。