Php laravel 5.4 varchar场迁移
当你创建一个迁移时,你有一个像varchar这样的字符串字段,你可以像下面的代码一样设置它,但是我在迁移中得到一个错误,说它的字节太多了Php laravel 5.4 varchar场迁移,php,laravel,Php,Laravel,当你创建一个迁移时,你有一个像varchar这样的字符串字段,你可以像下面的代码一样设置它,但是我在迁移中得到一个错误,说它的字节太多了 Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('email')->unique(); $table->timestamps();
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email')->unique();
$table->timestamps();
});
所以如果我这样做
$table->string('email', 255)->unique();
将其设置为最大值255,我仍然会得到相同的错误,并且我确定255是varchar字段的最大值,但是如果我在varchar字段中设置字段250,则不会得到错误。那么laravel 5.4中的迁移是怎么回事
[照亮\数据库\查询异常]
SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为1000字节(SQL:alter table`users`add unique`users\U email\U unique`(`email`)))
[pdo异常]
SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为1000字节
我认为unique不能为null
这个$table->string('slug')->unique()怎么样代码>
字符编码
问题是数据库中的字符编码。最有可能的情况是,您使用的是4字节编码utf8mb4
最有可能。如果是这样,255(字符)*4(每字符字节数)将不符合1000字节索引限制。您提到使用250可以解决这个问题。这是因为它符合1000字节的索引限制。尝试检查您的字符编码。有两种解决方案:升级到MySQL 5.7或使用更短的varchar。如果您无法轻松升级,请将此文件放到AppServiceProvider.php
文件中-它将默认字符串长度设置为可以正常工作的值
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
我在users表上做了一次迁移,在email字段$table->string('email')->unique()中遇到了同样的问题;Unique可以为空:)