在哪里添加innodb_large_prefix

时间:2018-06-20 11:34:34

标签: mysql

我遇到了一个问题。

您看到我已经使用WAMP在本地建立了一个WordPress网站,并且一切似乎都运行良好,直到我尝试将MySQL数据库导入到新的实时站点中,但它却出现了错误:

“#1709-索引列大小过大,最大列大小为767字节”

在此处查看完整错误的图片:
See image of the complete error here

现在我已经找到了一些可能导致此问题的答案:

MySQL error: The maximum column size is 767 bytes

在这里:

mysql change innodb_large_prefix

尽管我理解需要在代码方面实施的内容,但是对于实际需要放置代码的地方,我却并不明智。

除了导入,导出和编辑数据库凭证外,我再也不需要对MySQL做任何其他事情,这对我来说有点陌生。 尽管我很乐意在以后的某个时间更深入地了解它,但在这一点上,我还是希望我的实时站点能够正常工作。

1 个答案:

答案 0 :(得分:0)

我想通了,显然我不得不编辑SQL文件本身,并且必须在每个使用INNODB引擎的CREATE TABLE查询的末尾添加ROW_FORMAT=DYNAMIC

所以我改变了这个:

CREATE TABLE `xxx` (
  `visit_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `visitor_cookie` mediumtext NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `subscriber_id` bigint(20) NOT NULL,
  `url` mediumtext NOT NULL,
  `ip` tinytext NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`visit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

进入

CREATE TABLE `xxx` (
  `visit_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `visitor_cookie` mediumtext NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `subscriber_id` bigint(20) NOT NULL,
  `url` mediumtext NOT NULL,
  `ip` tinytext NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`visit_id`)
) ROW_FORMAT=DYNAMIC ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

然后,我将文件重新导入到本地服务器上,然后将新文件导出到实时服务器中……它现在就可以正常运行了。

我仍然感到奇怪的是,一旦超过一定数量的字符(747),mySQL不会自动将行设置为动态,并且即使它不起作用,它仍然可以在现有数据库中运行...但是也许WAMP的环境设置与实时服务器不同。

无论如何,谢谢大家!