网站首页 > 博客文章 正文
独立表空间的 SQL 压缩语法警告和错误
启用innodb_strict_mode时(默认值), 如果禁用innodb_file_per_table,则在CREATE TABLE或ALTER TABLE 语句中指定ROW_FORMAT=COMPRESSED或 KEY_BLOCK_SIZE会产生以下错误 。
ERROR 1031 (HY000): Table storage engine for 't1' doesn't have this option
当innodb_strict_mode被禁用时,如果innodb_file_per_table被禁用,则在CREATE TABLE或ALTER TABLE 语句中指定ROW_FORMAT=COMPRESSED或 KEY_BLOCK_SIZE会产生以下警告 。
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. |
+---------+------+---------------------------------------------------------------+
“非严格”行为允许您将 mysqldump文件导入不支持压缩表的数据库,即使源数据库包含压缩表。在这种情况下,MySQL 会创建表 ROW_FORMAT=DYNAMIC而不是阻止操作。
要将转储文件导入新数据库并重新创建原始数据库中存在的表,请确保服务器具有正确的 innodb_file_per_table 配置参数设置。
仅当ROW_FORMAT指定为COMPRESSED或被省略时才允许使用KEY_BLOCK_SIZE属性。将KEY_BLOCK_SIZE与任何其他ROW_FORMAT一起指定会生成一个警告,您可以使用SHOW WARNINGS来查看该警告。但是,该表是未压缩的;指定的KEY_BLOCK_SIZE被忽略。
等级 | 代码 | 信息 |
警告 | 1478 | InnoDB: ignoring KEY_BLOCK_SIZE=n unless ROW_FORMAT=COMPRESSED. |
如果您在 innodb_strict_mode启用的情况下运行,则 KEY_BLOCK_SIZE与任何其他非COMPRESSED的ROW_FORMAT的组合会生成错误,而不是警告,并且不会创建表。
选项 | 使用说明 | 描述 |
ROW_FORMAT =REDUNDANT | MySQL 5.0.3 之前使用的存储格式 | 效率低于ROW_FORMAT=COMPACT; 为了向后兼容 |
ROW_FORMAT =?COMPACT | 自 MySQL 5.0.3 以来的默认存储格式 | 在聚集索引页中存储 768 字节长列值的前缀,其余字节存储在溢出页中 |
ROW_FORMAT =?DYNAMIC | 如果它们适合,则将值存储在聚集索引页面中;如果不是,则仅存储指向溢出页的 20 字节指针(无前缀) | |
ROW_FORMAT =?COMPRESSED | 使用 zlib 压缩表和索引 | |
KEY_BLOCK_?SIZE =n | 指定 1、2、4、8 或 16 KB 的压缩页面大小;暗示 ROW_FORMAT=COMPRESSED。对于通用表空间,KEY_BLOCK_SIZE不允许使用等于InnoDB页面大小的值。 |
当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): Can't create table 'test.x' (errno: 1478)
mysql> SHOW ERRORS;
+-------+------+-------------------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------------------+
| Error | 1478 | InnoDB: invalid KEY_BLOCK_SIZE=33333. |
| Error | 1005 | Can't create table 'test.x' (errno: 1478) |
+-------+------+-------------------------------------------+
句法 | 警告或错误情况 | SHOW TABLE STATUS中显示的结果ROW_FORMAT |
ROW_FORMAT =REDUNDANT | 没有 | REDUNDANT |
ROW_FORMAT =COMPACT | 没有 | COMPACT |
ROW_FORMAT =COMPRESSED 或 ROW_FORMAT =DYNAMIC 或 指定KEY_BLOCK_SIZE | 除非启用innodb_file_per_table,否则独立表空间忽略该设置。通用表空间支持所有行格式。 | 独立表空间使用默认行格式;通用表空间使用指定的行格式 |
指定了无效KEY_BLOCK_SIZE(不是 1、2、4、8 或 16) | KEY_BLOCK_SIZE被忽略 | 指定的行格式,或默认的行格式 |
ROW_FORMAT =COMPRESSED 并 指定了有效KEY_BLOCK_SIZE | 没有; 指定KEY_BLOCK_SIZE被使用 | COMPRESSED |
用REDUNDANT、COMPACT或DYNAMIC行格式指定KEY_BLOCK_SIZE | KEY_BLOCK_SIZE被忽略 | REDUNDANT、COMPACT或 DYNAMIC |
ROW_FORMAT不是 REDUNDANT, COMPACT, DYNAMIC或COMPRESSED | 如果被 MySQL 解析器识别,则忽略。否则,将发出错误。 | 默认行格式或 N/A |
当innodb_strict_mode为ON时,MySQL 拒绝无效 ROW_FORMAT或 KEY_BLOCK_SIZE参数并发出错误。默认情况下innodb_strict_mode为ON。当 innodb_strict_mode为OFF时,MySQL 会针对忽略的无效参数发出警告而不是错误。
使用SHOW TABLE STATUS不能看到选择的KEY_BLOCK_SIZE。使用SHOW CREATE TABLE语句会显示KEY_BLOCK_SIZE (即使它在创建表时被忽略)。MySQL 无法显示表的真实压缩页大小。
通用表空间的 SQL 压缩语法警告和错误
1、如果在创建表空间时没有为通用表空间定义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
2、尝试将无效 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。
3、尝试将具有未压缩行格式的表添加到配置为存储压缩表的通用表空间会返回错误,如以下示例所示:
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不适用于通用表空间。
猜你喜欢
- 2024-09-23 MySQL最重要的日志-binlog详解(mysqlbinlog日志内容)
- 2024-09-23 mysql 错误:packets out of order.
- 2024-09-23 MySQL 性能优化:8 种常见 SQL 错误用法
- 2024-09-23 常见的 MySQL 异常及处理方法(mysql故障处理)
- 2024-09-23 详解蓝鲸部署常见报错及解决方案汇总
- 2024-09-23 MySQL数据库“十宗罪”【十大经典错误案例】
- 2024-09-23 MySQL 面试选择题15道(答案解释)(mysql面试题及答案整理)
- 2024-09-23 mysql1366错误:字符集冲突导致插入数据异常,解决方案
- 2024-09-23 mysql使用过程的错误记录(五)(mysql常见错误)
- 2024-09-23 mysql 使用过程的错误记录(一)(mysql语句错误)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)