MySQL错误:最大列大小为767字节

use*_*615 12 mysql database size innodb mysql-workbench

当我运行一个与MySQL有关的程序时,我收到了以下错误消息:

2015-06-10 15:41:12,250 ERROR app.wsutils 419 INCRON:错误:('HY000','[HY000] [MySQL] [ODBC 5.2(w)驱动程序] [mysqld-5.7.7-rc-log]索引列大小太大.最大列大小为767字节.(1709)(SQLExecDirectW)')

我用Google搜索了一下,发现此错误可能与该innodb_large_prefix选项有关.但是,我使用的是MySQL 5.7.7 rc,它已经设置innodb_large_prefix为"ON"(在MySQL Workbench中检查),允许最多3072个字节.我不确定这是不是问题innodb_large_prefix.

无论如何,有没有人知道如何解决这个问题?

小智 60

从 Wamp 版本 3.2.6 开始,
只需编辑此文件: C:\wamp64\bin\mysql\mysql8.0.27\my.iniinnodb-default-row-format将值 的配置
从更改innodb-default-row-format=compact
innodb-default-row-format=dynamic
重新启动 mysql

  • 这是最简单的答案,尽管这个问题是 6 年前提出的。 (4认同)

Sas*_*ala 17

在BK435给出的答案的帮助下,我做了以下并解决了问题.

set global innodb_file_format = BARRACUDA;
set global innodb_large_prefix = ON;
create table test (........) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Run Code Online (Sandbox Code Playgroud)

  • 从MariaDB 10.2.2开始,当然:)你也可以设置`SET GLOBAL innodb_default_row_format ='DYNAMIC';` (4认同)

BK4*_*435 15

您要编制索引的列太大,您的设置必须不正确innodb_large_prefix.还必须设置一些先决条件参数才能innodb_large_prefix正常工作.

您可以检查以确保通过运行来设置innodb_large_prefix:

show global variables like 'innodb_lar%';

以下是使用innodb_large_prefix的几个先决条件:

您需要设置全局变量innodb_file_format = BARRACUDA

检查设置运行: show global variables like 'innodb_fil%';

在表级,您必须使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED

对于Innodb,默认情况下行以COMPACT格式存储(ROW_FORMAT = COMPACT).

  • 在某些我尝试"转换为字符集"的情况下,我使用的是MySQL 5.5,其中InnoDB的默认`ROW_FORMAT`是`COMPACT`.使用`ALTER TABLE foo ROW_FORMAT = DYNAMIC,CONVERT TO CHARACTER SET charset`就可以了. (3认同)
  • 如果您像我一样需要更改 mysqldump 文件以将 `ROW_FORMAT=DYNAMIC` 添加到每个创建表语句,请尝试以下操作:```sed -i 's/ENGINE=InnoDB/ENGINE=InnoDB ROW_FORMAT=DYNAMIC/g 'database_dump.sql``` (2认同)

Gam*_*rah 9

对于我使用 Mariadb 10.1.31,只需在登录 Mysql CLI 时添加以下内容:

SET GLOBAL innodb_file_format = Barracuda;

SET GLOBAL innodb_file_per_table = ON;

SET GLOBAL innodb_large_prefix = ON;

SET GLOBAL innodb_default_row_format = 'DYNAMIC';
Run Code Online (Sandbox Code Playgroud)


小智 6

我使用的是 MariaDB 版本 10.1.38 并使用了以下所有给定的命令,但它不起作用 -

set global innodb_large_prefix = ON;
Query OK, 0 rows affected (0.00 sec)

set global innodb_file_per_table = ON;
Query OK, 0 rows affected (0.00 sec)

set global innodb_file_format = Barracuda;
Query OK, 0 rows affected (0.00 sec)

SET GLOBAL innodb_default_row_format = 'DYNAMIC';
Run Code Online (Sandbox Code Playgroud)

因为在您重新启动 MySQL(或 MariaDB)后,这些设置将不会在 mysql 提示符下使用命令反映回来: show variables like 'innodb%';

然后我编辑了 My.ini 并将这些设置添加到以下位置的文件中 - C:\xampp\mysql\bin\my.ini

## Innodb settings to bypass error of max size 737
innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
## Above 3 didnot work so i added below
innodb_default_row_format = 'DYNAMIC'
Run Code Online (Sandbox Code Playgroud)

来源:https : //www.experts-exchange.com/questions/28675824/Why-am-I-unable-to-turn-innodb-large-prefix-ON-successfully-Every-time-I-reboot-mySql- on-my-Ubuntu-VPS-it-reset-to-OFF.html


Ign*_*ers 6

您需要将innodb-default-row-format变量更改为dynamic

  • 如果您使用 phpMyAdmin,请导航到变量并搜索row format.

  • 如果您使用的是 WampServer,请导航到my.ini如下文件: C:\wamp64\bin\mysql\mysql8.0.27\my.ini

欲了解更多信息,请访问MySQL 手册


小智 5

只需将以下选项添加到 my.cnf 中即可

    [mysqld]
    innodb_file_format=Barracuda
    innodb_file_per_table=1
    innodb_large_prefix=1
Run Code Online (Sandbox Code Playgroud)

然后,重新启动mysql服务器,问题就解决了。

  • 您忘记为“innodb_large_prefix”提供值 (2认同)