当前位置: 首页 > 面试题库 >

MySQL更改innodb_large_prefix

蒯翰墨
2023-03-14
问题内容

我只是在VM上设置了debian 8.3,并在本教程之后安装了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它仅限于767Byte,Innodb可以通过在my.cnf文件中设置innodb_large_prefix来解决此问题。但是我找不到文件,它不在下面/etc/,也没有/etc/mysql/-folder,但是my.cnf我发现的唯一是在中/opt/lampp/etc/,但是,我将其添加innodb_large_prefix=1到文件并重新启动了lampp之后。我仍然得到同样的错误。我做错什么了?

编辑SELECT version()返回5.6.14,因此innodb_large_prefix应受支持。

edit2 :我知道我可以通过仅将部分密钥设置为索引来获得低于767Byte的方法来解决此问题。但是我想在这里知道如何正确配置mysql。


问题答案:

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

  • SET GLOBAL innodb_file_format =梭子鱼;
  • SET GLOBAL innodb_file_per_table = ON;
  • ROW_FORMAT = DYNAMIC; -或压缩(在CREATE结尾)
  • innodb_large_prefix = 1

注意

SELECT * FROM information_schema.INNODB_SYS_TABLESPACES;

将提供file_format和row_format。其他一些I_S表提供了file_per_table的线索。



 类似资料:
  • 问题内容: 我一直试图重置我的MySQL根密码。我已经运行了mysqld_safe –skip-grant- tables,更新了根密码,并检查了用户表以确保它在那里。重新启动mysql守护程序后,我尝试使用刚刚设置的新root密码登录,但仍然由于用户“ root”错误而拒绝访问。我也尝试过完全删除并重新安装mysql(包括删除my.cnf文件),但还是没有运气。有人对我下一步的工作有什么建议吗?

  • 问题内容: 我试图在事实发生后修改表使其成为主键列。我尝试了以下SQL,但收到语法错误通知。 我做错什么了吗? 问题答案:

  • 问题内容: 我有一个名为test的mySQL表: 我想将locationExpect列更改为: 如何快速完成? 问题答案: 创建表后是要更改表吗?如果是这样,则需要使用alter table ,尤其是: 例如

  • 问题内容: 我已经在redhat linux上安装了MySQL服务器5。我无法以root用户身份登录,因此无法更改root用户密码。 当我尝试像这样设置一个时: 我收到一个错误: 好像设置了root密码。 我也尝试过使用(此处描述)重置密码。 然后制作: 我什至卸载了mysql-server(使用yum),然后重新安装了它,但这没有帮助。 如何强制重置root密码? 问题答案: 我删除了MySQL

  • 问题内容: 我正在使用mysql和mysql工作台。我用innodb引擎创建了5个表。我检查了他们的引擎,然后才将数据插入到innodb中。我从5个MyISAM表中插入了数据,现在我的innodb表是MyISAM。我不能改变他们。我使用了alter table engine = innodb,但是它不起作用。 问题答案: 从手册中:http : //dev.mysql.com/doc/refman

  • 问题内容: 根据以下我用于常规mysql的代码,如何将其转换为使用mysqli? 像更改为一样简单吗? 问题答案: 首先要做的可能是将每个函数调用都替换为等效函数,至少在您愿意使用过程式API的情况下-考虑到您已经有一些基于MySQL API的代码,这将是更简单的方法是一种程序性的。 为了解决这个问题,“ MySQLi扩展功能摘要” 绝对是有用的。 例如: 将被替换 将被替换为和/或,具体取决于上