我正在尝试将MySQL表的引擎从“ innodb”更改为“ archive”。我遇到以下错误:
我一直在stackoverflow中寻找它,但是没有成功(我没有找到任何可用的答案)。知道如何解决该问题吗?
答案 0 :(得分:1)
您不能在ARCHIVE引擎中将AUTO_INCREMENT设置为特定值。因此,只需删除auto_increment = 379
子句。
每个表的ARCHIVE引擎不支持多个索引。您必须为所有二级索引删除索引,最多保留一个索引。
实际上,我在ARCHIVE引擎中甚至没有使用一个索引就没有运气。我没有足够频繁地使用ARCHIVE引擎来知道如何解决这个问题。
mysql> alter table t add key (x);
ERROR 1030 (HY000): Got error -1 from storage engine
在文档中很难找到它,但是我确实找到了表明ARCHIVE存储引擎根本不支持索引的参考,即使您得到的错误提示它支持1个索引。
https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html说:
归档:这些紧凑的未索引表...
https://dev.mysql.com/doc/refman/8.0/en/archive-storage-engine.html说:
ARCHIVE存储引擎会生成专用表,这些表可以在很小的空间内存储大量的未索引数据。
AUTO_INCREMENT列可以具有唯一索引或非唯一索引。尝试在其他任何列上创建索引都会导致错误。
演示:
mysql> create table t ( x int auto_increment, key(x)) engine=archive;
Query OK, 0 rows affected (0.03 sec)
如果您尝试为可为空的列编制索引,它也将不起作用。
mysql> create table t ( x int, key(x)) engine=archive;
ERROR 1121 (42000): Table handler doesn't support NULL in given index. Please change column 'x' to be NOT NULL or use another handler
您应该考虑为什么要使用ARCHIVE引擎。如果您想在更少的空间中存储数据,可以将InnoDB与ROW_FORMAT=COMPRESSED
一起使用吗?