MySQL更改Innodb_Large_Prefix

iaqfqrcu  于 2022-09-18  发布在  Java
关注(0)|答案(6)|浏览(159)

我刚刚在一个VM上安装了Debian 8.3,并在此Tutorial之后安装了xampp。一切都很正常,直到我尝试创建一个新表:

create table testtable
(
  id int(10) not null auto_increment,
  firstname varchar(255) collate utf8mb4_german2_ci not null,
  lastname varchar(255) collate utf8mb4_german2_ci not null,
  primary key (id),
  unique key (lastname)
)engine = innodb default charset=utf8mb4, collate=utf8mb4_german2_ci

我收到错误:#1709 - Index column size too large. The maximum column size is 767 bytes.,然后我发现它来自prefix limitation,它在Innodb中被限制为767Byte,我可以通过在my.cnf文件中设置Innodb_Large_Prefix来修复这个问题。但是我找不到这个文件,它不在/etc/下,也没有/etc/mysql/-文件夹,我唯一找到的my.cnf/opt/lampp/etc/中,然而,在我将innodb_large_prefix=1添加到文件中并重新启动Lampp后。我仍然收到相同的错误。我做错什么了?

编辑SELECT version()返回5.6.14,所以应该支持innodb_large_prefix

edit2:我知道我可以解决这个问题,只需将键的一部分设置为索引,使其低于767Byte。但我想在这里知道如何正确配置MySQL。

bvn4nwqk

bvn4nwqk1#

在5.6.3和5.7.7之间(即如果您运行的是MySQL 5.6或MariaDB 10.0),有4个步骤:

  • 设置全局Innodb_FILE_FORMAT=梭鱼;
  • 设置GLOBAL Innodb_FILE_PER_TABLE=ON;
  • ROW_FORMAT=动态;--或压缩(在CREATE结束时进行)
  • Innodb_Large_Prefix=1

注意事项

SELECT * FROM information_schema.INNODB_SYS_TABLESPACES;

将提供FILE_FORMAT和ROW_FORMAT。其他一些I_S表提供了关于FILE_PER_TABLE的线索。

olqngx59

olqngx592#

我正在使用带有WAMP服务器的MySQL 5.6.17我通过编辑my.ini文件解决了这个问题。在那里找到类别[mySQL]添加以下说明

[mysqld]
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_file_per_table = ON

不要忘记保存更改并重新启动所有服务。

vngu2lb8

vngu2lb83#

要获得永久解决方案,请在您的MariaDB 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'

我用的是10.1.38

ct2axkht

ct2axkht4#

转到您的xampp并添加以下查询:

`mysql>` set global innodb_file_format = `BARRACUDA`;
`mysql>` set global innodb_large_prefix = `ON`;
h7appiyu

h7appiyu5#

mysql> set global innodb_file_format = `BARRACUDA`;
mysql> set global innodb_large_prefix = `ON`;
aamkag61

aamkag616#

我正在使用MySQL 8.0^,试图在laravel 9上执行PHP工匠迁移以解决此问题时遇到此错误。请转到MySQL上的WAMP服务器悬停,打开并编辑my.inistep 1default-storage-engine=MYISAM更改为default-storage-engine=InnoDBthat's the final setting

节省IT并重新启动所有服务

相关问题