首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 5.5 innodb_large_prefix配置设置未生效

问MySQL 5.5 innodb_large_prefix配置设置未生效
EN

Stack Overflow用户
提问于 2017-06-22 20:20:08
回答 1查看 10.2K关注 0票数 0

我在Debian上运行MySQL 5.5.55,我希望启用innodb_large_prefix设置,这样我就可以拥有大于767字节的表INDEXes。

我的/etc/mysql/my.cnf文件中有以下配置:

代码语言:javascript
复制
[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时,活动配置显示为:

代码语言:javascript
复制
| innodb_file_format             | Barracuda              |
| innodb_large_prefix            | OFF                    |
| innodb_file_per_table          | ON                     |

如果我从MySQL CLI手动更改全局设置,则该设置似乎会更改:

代码语言:javascript
复制
mysql> SET GLOBAL innodb_large_prefix = ON;
...
| innodb_large_prefix            | ON                     |

然后,当我尝试实际使用“大前缀”时,会得到一个错误:

代码语言:javascript
复制
mysql> alter table [...]
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

MySQL的设置文档说,使用此设置有几个先决条件:

  1. MySQL版本5.5.14或更高版本✔
  2. innodb_file_format = Barracuda✔
  3. innodb_file_per_table = ON✔
  4. innodb_large_prefix = ON✔

在玩了一会儿之后,我能够按需要转换我的表,方法是:

  1. SET GLOBAL innodb_large_prefix = ON;
  2. ALTER TABLE [...], ROW_FORMAT=DYNAMIC;

太棒了。然后重新启动MySQL并检查有效设置:

代码语言:javascript
复制
| innodb_large_prefix            | OFF                    |

我在使用那张表时没有任何错误,所以我想一切都很好,但奇怪的是,设置似乎不稳定。

我尝试重新修改我的表,设置为OFF,我无法构建那个大索引。这是否意味着每当我想以这种方式修改表时,都必须手动将innodb_large_prefix设置为ON?我是否没有在/etc/mysql/my.cnf中正确配置此设置?

EN

回答 1

Stack Overflow用户

发布于 2017-06-23 11:08:35

这有点隐藏,但是根据文档,对于MySQL < 5.6,您必须在配置文件中使用1而不是ON:

具有“布尔”类型的变量可以设置为0、1、ON或OFF。(如果在命令行或选项文件中设置它们,请使用数字值。)

对于MySQL >= 5.6,您可以使用ON和OFF 在配置文件中。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44708668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档