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 查询构建器 [重复]