【发布时间】:2018-10-14 18:04:27
【问题描述】:
如this person、this person和this person所示,为了避免出现
SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节
你必须像这样修改你的 Laravel 项目的AppServiceProvider.php:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema; //add this
class AppServiceProvider extends ServiceProvider {
public function boot() {
Schema::defaultStringLength(191); //and this
}
public function register() { }
}
但是这种方法的缺点是我使用的 VARCHAR 被限制为 191 个字符,并且我希望有一个比这更长的字段。我该怎么办?
感谢您的帮助。
【问题讨论】:
-
你链接到的问题有几个关于如何配置你的mysql服务器来支持这个东西的答案(索引超过191个字符)。这些有什么问题?
-
因为我会将我的项目部署到我客户的机器上,我不知道会支持哪个 MySQL 版本。此外,我不知道在迁移中设置 VARCHAR 的长度可以绕过 255 个字符的限制。
-
在迁移中设置 varchar 的长度并没有摆脱限制。限制来自尝试在表上创建索引并且索引变得比支持的长。如果您从未在 varchar 字段上创建索引,则不会有任何限制。然而,Laravel 在默认迁移中的 users.email 字段上创建了一个索引,因此人们在他们的新项目中看到了这个限制。我认为您应该将 mysql 配置记录为应用程序要求,并让他们的技术团队为您解决。