如果未启用 Barracuda 文件格式,则在or语句中
指定ROW_FORMAT=COMPRESSED
or
会产生以下警告。您可以使用语句
查看它们。KEY_BLOCK_SIZE
CREATE
TABLE
ALTER TABLE
SHOW
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_FORMAT
COMPRESSED
KEY_BLOCK_SIZE
ROW_FORMAT
SHOW WARNINGS
KEY_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_SIZE
CREATE TABLE
ALTER 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 =Barracuda innodb_file_per_table |
COMPACT |
指定无效KEY_BLOCK_SIZE (不是 1、2、4、8 或 16) |
KEY_BLOCK_SIZE 被忽略 |
请求的行格式,或COMPACT 默认 |
ROW_FORMAT=COMPRESSED KEY_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
,
ON
MySQL 拒绝无效
ROW_FORMAT
或KEY_BLOCK_SIZE
参数。为了与早期版本的 MySQL 兼容,默认情况下不启用严格模式;相反,MySQL 会针对忽略的无效参数发出警告(而非错误)。
KEY_BLOCK_SIZE
使用
无法查看所选内容
SHOW TABLE
STATUS
。该语句SHOW CREATE
TABLE
显示KEY_BLOCK_SIZE
(即使它在创建表时被忽略)。MySQL无法显示表的真实压缩页大小。