Mysql Row_Format 参数讲解 及sql导入出错:ERROR 1031 xxx Table storage engine for xxx does not have this option

ERROR 1031 xxx Table storage engine for xxx does not have this option
今天更改数据引擎的时候,突然出现了

Table storage engine for ‘#xxxx’ doesn’t have this option

解决办法: 批量替换 ROW_FORMAT=FIXED 成 ROW_FORMAT=default

通过搜索,发现了一些端倪,下面是对于Row_Format参数的讲解:

在MYSQL中, 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表[static/fixed ],即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。

那么实际开发中,这种表很少,大部分表的字段类型都是有很多种的,那么这种表就叫做:dynamic :动态表 ,优点是节省空间,缺点是读取的时间的开销

ROW_FORMAT 的值如下:

DEFAULT

FIXED

DYNAMIC

COMPRESSED

REDUNDANT

COMPACT

修改row_format的参数:

ALTER TABLE table_name ROW_FORMAT = DEFAULT
命令执行的结果:

fixed—>dynamic: 这会导致CHAR变成VARCHAR

dynamic—>fixed: 这会导致VARCHAR变成CHAR

注意:只有在MYSAM 的数据库引擎才支持这个属性:
mysql> alter table oem_idlib row_format = fixed;
ERROR 1478 (HY000): Table storage engine ‘InnoDB’ does not support the create option ‘ROW_TYPE’
  
这个问题通常是在表上做了一些表当前的存储引擎不支持的操作,或者当前表将要转换为目标存储

引擎,但是有一些当前表特定的创建选项目标存储引擎不支持引起的。类似的问题都可以按照这个思路来解决。
我这里遇到的问题是将一个myisam表转为innodb引擎引起的。
mysql> show create table t_innodb_12;
±------------±------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
±------------±------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_innodb_12 | CREATE TABLE t_innodb_12 (
id int DEFAULT NULL,
id1 int NOT NULL,
c1 varchar(10) DEFAULT NULL,
KEY idx_id (id) KEY_BLOCK_SIZE=2048,
KEY idx_id1 (id1) KEY_BLOCK_SIZE=4096,
KEY idx3 (id,id1,c1)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED

注意这里有ROW_FORMAT=FIXED 这个选项。
mysql> alter table t_innodb_12 engine=innodb;
ERROR 1031 (HY000): Table storage engine for ‘#xxx’ doesn’t have this option

需要将ROW_FORMAT=FIXED去掉,通过设置为default的方式:

mysql> alter table t_innodb_12 row_format=default;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> show create table t_innodb_12;
±------------±-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
±------------±-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_innodb_12 | CREATE TABLE t_innodb_12 (
id int DEFAULT NULL,
id1 int NOT NULL,
c1 varchar(10) DEFAULT NULL,
KEY idx_id (id) KEY_BLOCK_SIZE=2048,
KEY idx_id1 (id1) KEY_BLOCK_SIZE=4096,
KEY idx3 (id,id1,c1)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
±------------±-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
接下来就可以了。

mysql> alter table t_innodb_12 engine=innodb;
Query OK, 0 rows affected (1.34 sec)
Records: 0 Duplicates: 0 Warnings: 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值