问题
从第一次尝试开始,当我尝试运行我的第一次时migrate
,情况已经很糟糕了。为什么?因为我立即从一条我从未见过的错误消息开始,因为我不熟悉 Laravel(或其他框架)。错误消息类似于以下示例:
[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQL:alter table users add unique users_email_unique(email))
[PDOException] SQLSTATE[42000]: 语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节
当我第一次看到这些异常时,我以为我已经毁了整个应用程序。
我该如何解决这个问题并解决(或解决)这个问题?
问题
这个问题是关于 Laravel 以及为什么在带有 MariaDB(低于 10.2.2)或 MySQL(低于 5.7.7)的网络服务器上安装它如此困难。您甚至可能无法运行第一次迁移。
原因
Laravel 默认使用 utf8mb4 字符集,其中包括支持在数据库中存储“表情符号”。如果您运行的 MySQL 版本早于 5.7.7 版本或 MariaDB 早于 10.2.2 版本,则可能需要手动配置迁移生成的默认字符串长度,以便 MySQL 为它们创建索引。
(从Laravel 文档逐字复制)
解决方案
首先,错误/异常看起来像是应用程序不支持您的 MySQL/MariaDB 数据库。我需要改变什么吗?我需要配置东西吗?
解决方法很简单。根据“原因”中提到的 Laravel 文档,您需要指定defaultStringLength
由Schema
.
您需要在 Laravel 安装中编辑一个文件,该文件位于 app/Providers/AppServiceProvider.php
默认页面如下所示:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
您只需要更改两个规则。
usings
你需要添加Schema
use Illuminate\Support\Facades\Schema;
defaultStringLength
在引导方法中指定Schema::defaultStringLength(191);
更改后的代码应如下所示:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
这将告诉您的迁移如何处理defaultStringLength
以及如何处理它。在添加这些之后,您应该能够运行您的第一个php artisan migrate
并开始构建很棒的东西!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句