MySQL 5.5 innodb_large_prefix配置设置未生效

Chr*_*ltz 0 mysql innodb

我在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
Run Code Online (Sandbox Code Playgroud)

(我也试过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                     |
Run Code Online (Sandbox Code Playgroud)

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

mysql> SET GLOBAL innodb_large_prefix = ON;
...
| innodb_large_prefix            | ON                     |
Run Code Online (Sandbox Code Playgroud)

...但是当我尝试实际使用"大前缀"时,我收到一个错误:

mysql> alter table [...]
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
Run Code Online (Sandbox Code Playgroud)

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

  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并检查有效设置:

| innodb_large_prefix            | OFF                    |
Run Code Online (Sandbox Code Playgroud)

我在使用该表等时没有错误,所以我猜一切都没问题,但设置似乎并不坚持,这很奇怪.

我尝试使用设置设置重新更改我的表,OFF我无法构建那个大索引.这是否意味着我将不得不手动设置innodb_large_prefixON任何时候我想改变表以这种方式?我没有正确配置此设置/etc/mysql/my.cnf吗?

Sol*_*are 5

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

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

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