如何使用旧版本的 MariaDB 和 MySQL 安装 Laravel?(运行迁移时例外)

科恩·霍兰德

问题
从第一次尝试开始,当我尝试运行我的第一次时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 文档,您需要指定defaultStringLengthSchema.

您需要在 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()
    {
        //
    }
}

您只需要更改两个规则。

  1. usings你需要添加Schema
    use Illuminate\Support\Facades\Schema;
  2. 您需要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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使xampp运行旧版本的mySQL和/或phpMyAdmin

来自分类Dev

如何使xampp运行旧版本的mySQL和/或phpMyAdmin

来自分类Dev

使用Composer安装旧版本的Laravel

来自分类Dev

如何安装旧版本的postgresql和postgis?

来自分类Dev

如何安装旧版本的postgresql和postgis?

来自分类Dev

安装旧版本的Ruby和Rails

来自分类Dev

在10.10中安装旧版本的mysql

来自分类Dev

如何确保干净重新安装mysql和mariadb

来自分类Dev

Ubuntu 16.04和旧版本的MySQL

来自分类Dev

如何迁移到较新的Python版本并仍然使用旧版本中的软件包?

来自分类Dev

了解MySQL和MariaDB的版本控制吗?

来自分类Dev

如何从NuGet安装EntityFramework 5.0(和其他旧版本)?

来自分类Dev

为什么在使用apt-get安装时会获得旧版本的nodejs和npm?

来自分类Dev

phpinfo()使用旧版本。“进行安装”后我缺少什么?

来自分类Dev

FFMPEG-为什么安装后我最终使用旧版本?

来自分类Dev

为旧版本的Perl安装Zlib和Gzip模块

来自分类Dev

无法通过apt-get安装旧版本的MySQL

来自分类Dev

apt - 安装旧版本的数据库,例如 mysql

来自分类Dev

C#使用MySql和MariaDB

来自分类Dev

如何在使用旧版本 org.eclipse.equinox.common 的 Eclipse 中运行 JUnit 测试?

来自分类Dev

如何使用APT安装旧版本的Postgres?

来自分类Dev

为什么我看到两个不同版本的 TypeScript 和 ng -v 和 tsc -v?如何强制 VSCode 使用旧版本,即 2.6.2?

来自分类Dev

意外安装mariadb后无法安装MySQL

来自分类Dev

如何安装Mariadb?

来自分类Dev

如何安装MariaDB?

来自分类Dev

如何安装旧版本的Jenkins?

来自分类Dev

如何安装旧版本的sbt?

来自分类Dev

如何安装旧版本的PHPUNIT?

来自分类Dev

如何安装旧版本的Jekyll?

Related 相关文章

热门标签

归档