我在Debian Linux上运行MySQL 5.5.55,我想启用innodb_large_prefix
设置,这样我可以拥有大于767字节的表INDEX。
我的/etc/mysql/my.cnf
文件中有以下配置:
[mysqld]
...
innodb_file_per_table=1
innodb-large-prefix=ON
innodb_file_format=barracuda
(我也尝试了innodb_large_prefix=ON
。)
更新:我仔细检查了,没有其他配置文件存在,例如/etc/my.cnf
,/usr/etc/my.cnf
,~root/.my.cnf
,~mysql/.my.cnf
)
但是当我重新启动MySQL时,活动配置显示为:
| innodb_file_format | Barracuda |
| innodb_large_prefix | OFF |
| innodb_file_per_table | ON |
如果我从MySQL CLI手动更改GLOBAL设置,则设置似乎会更改:
mysql> SET GLOBAL innodb_large_prefix = ON;
...
| innodb_large_prefix | ON |
...但是当我尝试实际使用“大前缀”时,我收到一个错误:
mysql> alter table [...]
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
MySQL innodb_large_prefix
setting的文档说使用此设置有几个先决条件:
innodb_file_format
= Barracuda
✔innodb_file_per_table
= ON
✔innodb_large_prefix
= ON
✔在玩了一下后,我能够按照需要转换我的表:
SET GLOBAL innodb_large_prefix = ON;
ALTER TABLE [...], ROW_FORMAT=DYNAMIC;
大。然后我再次重启MySQL并检查有效设置:
| innodb_large_prefix | OFF |
使用该表等时没有错误,所以我猜一切都没问题,但设置似乎并不坚持,这很奇怪。
我尝试将设置设置为OFF
重新更改我的表,我无法构建那个大索引。这是否意味着我必须在以这种方式改变表格的任何时候手动将innodb_large_prefix
设置为ON
?我没有在/etc/mysql/my.cnf
中正确配置此设置吗?
答案 0 :(得分:5)
它有点隐藏,但根据documentation,对于MySQL< 5.6,您必须在配置文件中使用1
而不是ON
:
具有“boolean”类型的变量可以设置为0,1,ON或OFF。 (如果在命令行或选项文件中设置它们,请使用数值。)
对于MySQL> = 5.6,您可以使用ON
和OFF
in the config files。