关于mysql索引错误_关于MySql索引长度错误的说明

在使用 Laravel 进行数据库迁移时遇到索引长度限制的错误,原因是 MySql 的 InnoDB 引擎对索引字段长度有767字节的限制。当使用如GBK编码时,每个字符占2字节,导致字段长度受限。解决方法包括缩短索引字段长度或更改数据库引擎。本文将介绍这个问题并提供解决思路。
摘要由CSDN通过智能技术生成

写在前面:

最近,在研究Laravel的一些东西,在使用laravel的 model 和 数据库迁移操作进行数据库实例创建时,发现总会报一个索引长度限制的 错误,于是在网上查了一些资料后,看了几片帖子,感觉讲的并不是很满意,所以决定写一个简单的介绍,和我的解决方式。供君参考。

问题描述:利用数据库迁移文件,建立数据库实例模型时,会提示以下这样的错误。

错误的原因:我们在使用laravel的migrate功能进行,数据库创建的时候,laravel会自动创建两个默认的数据库迁移文件,create_users_table.php 和 create_password_resets_table.php两个文件,这两个文件中都有对应的 索引建立的过程。

MySql数据库对表的索引字段的长度有限制,不同 引擎和编码方式的数据库对应的限制长度也是不一样的。引擎限制:

myisam(mysql数据库引擎的一种)对应的索引长度限制为1000,而Innodb(mysql数据库引擎的一种)对应的索引长度限制为767。

编码方式限制:

latin1 = 1 byte = 1 character

uft8 = 3 byte = 1 character

gbk = 2 byte = 1 character

That is to say ,假如你建立引擎为innodb,编码方式为gbk的数据库时, 在给表的一个字段建立索引时,这个字段可使用字符character为:767/2 = 383.5。如果你使用这样的:

$table->char("username" , 385)->index()

将会出现上面的错误。

解决方法:

1、缩减索引字段长度

2、修改数据库引擎(不建议)

相关链接:

参考链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值