我在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设置的文档说明使用此设置有几个先决条件:
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 |
Run Code Online (Sandbox Code Playgroud)
我在使用该表等时没有错误,所以我猜一切都没问题,但设置似乎并不坚持,这很奇怪.
我尝试使用设置设置重新更改我的表,OFF我无法构建那个大索引.这是否意味着我将不得不手动设置innodb_large_prefix到ON任何时候我想改变表以这种方式?我没有正确配置此设置/etc/mysql/my.cnf吗?