写在前面:
最近,在研究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、修改数据库引擎(不建议)
相关链接:
参考链接: