PHP Laravel迁移SQL问题[重复]

Posted

技术标签:

【中文标题】PHP Laravel迁移SQL问题[重复]【英文标题】:PHP Laravel migrate SQL issue [duplicate] 【发布时间】:2018-10-21 07:53:21 【问题描述】:

当我在我的 laravel 项目中在 cmd 上执行 php artisan migrate 时。我收到以下错误。请帮忙。

【问题讨论】:

【参考方案1】:
laravel 5.4.* file location : app/Providers/AppServiceProvider.php

AppServiceProvider.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()
    
        //
    

之后执行 migrate Artisan 命令:

php artisan migrate

【讨论】:

【参考方案2】:

您可能遇到了索引长度配置。

laravel documentation 声明如下

Laravel 默认使用 utf8mb4 字符集,其中包括支持在数据库中存储“表情符号”。如果您运行的 mysql 版本早于 5.7.7 版本或 MariaDB 版本早于 10.2.2 版本,您可能需要手动配置迁移生成的默认字符串长度,以便 MySQL 为其创建索引。您可以通过在 AppServiceProvider 中调用 Schema::defaultStringLength 方法来配置它:

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()

    Schema::defaultStringLength(191);

【讨论】:

【参考方案3】:

在位于 (app/Providers) 的 AppServiceProvider.php 中添加这个

use Illuminate\Support\Facades\Schema;

public function boot()

    Schema::defaultStringLength(191);

【讨论】:

【参考方案4】:

由于电子邮件使用unique()而发生错误,但它不知道您的唯一值有多长。您有两种方法可以解决此问题

第一个在你的 App\Providers\AppServiceProvider.php 中全局设置,然后在启动方法中添加你的代码:

use Illuminate\Support\Facades\Schema;

public function boot()

    Schema::defaultStringLength(191);

第二个只在你的迁移表中设置,你只需要指定字符串的长度如:

$table->string('email', 191)->unique();

【讨论】:

以上是关于PHP Laravel迁移SQL问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 PHP SQL 转换为 Laravel 查询构建器 [重复]

Laravel 5.6.17 php artisan 迁移错误与 php 7.2 [重复]

无法添加外键约束 - Laravel 迁移错误

Laravel 5.4数据库迁移不起作用[重复]

从迁移中显示 Laravel SQL

PHP工匠迁移不会迁移所有表[重复]