Php 如何使用旧版本的MariaDB和MySQL安装Laravel?(运行迁移时出现异常)
问题Php 如何使用旧版本的MariaDB和MySQL安装Laravel?(运行迁移时出现异常),php,mysql,laravel,mariadb,laravel-migrations,Php,Mysql,Laravel,Mariadb,Laravel Migrations,问题 从第一次尝试开始,当我尝试运行我的第一次迁移时,事情已经非常糟糕了。为什么?因为我对Laravel(或其他框架)不熟悉,所以我立即开始了一条我从未见过的错误消息。错误消息如下所示: [照亮\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter table users add unique users\U email\U unique(电子邮件)) [例外情况] SQLSTATE[42000]:语法错误或
从第一次尝试开始,当我尝试运行我的第一次
迁移时,事情已经非常糟糕了。为什么?因为我对Laravel(或其他框架)不熟悉,所以我立即开始了一条我从未见过的错误消息。错误消息如下所示:
[照亮\数据库\查询异常]
SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter table users add unique users\U email\U unique(电子邮件))
[例外情况]
SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节
当我第一次看到这些异常时,我以为我已经破坏了整个应用程序
如何解决此问题和解决方法?问题
这个问题是关于Laravel的,以及为什么在带有MariaDB(低于10.2.2)或MySQL(低于5.7.7)的Web服务器上安装它如此困难。您甚至可能无法运行第一次迁移
原因
默认情况下,Laravel使用utf8mb4字符集,其中包括对在数据库中存储“emojis”的支持。如果您运行的MySQL版本早于5.7.7版本或早于10.2.2版本,则可能需要手动配置迁移生成的默认字符串长度,以便MySQL为其创建索引
(逐字逐句从中复制)
解决方案
首先,这些错误/异常看起来像是应用程序不支持MySQL/MariaDB数据库。我需要改变什么吗?我需要配置东西吗
解决办法很简单。根据“原因”中提到的Laravel文档,您需要指定由模式管理的defaultStringLength
您需要在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()
{
//
}
}
<?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
,并开始构建很棒的东西