一、总结
一句话总结:
在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:Schema::defaultStringLength(191); 还有记得引入Schema
1 <?php
2
3 namespace App\Providers;
4
5 use Illuminate\Support\ServiceProvider;
6 use Illuminate\Support\Facades\Schema;
7
8 class AppServiceProvider extends ServiceProvider
9 {
10 /**
11 * Bootstrap any application services.
12 *
13 * @return void
14 */
15 public function boot()
16 {
17 //
18 Schema::defaultStringLength(191);
19 }
20
21 /**
22 * Register any application services.
23 *
24 * @return void
25 */
26 public function register()
27 {
28 //
29 }
30 }
1、laravel中的服务器提供者是什么?
Service Providers (服务提供者) 是 Laravel 「引导」过程的核心。这个「引导」过程可以理解成「电脑从按下开机按钮到完全进入桌面」这段时间系统干的事。
2、laravel服务提供者中两个重要的方法register()和boot()分别是做什么的?
register() :注册服务,比如注册kernel文件里面的内容
boot() :引导服务,比如这里的设置默认字符串长度:Schema::defaultStringLength(191);
3、laravel中的schema是什么?
Laravel 的Schema门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、平滑的API。
二、【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
博客对应视频位置:laravel疑难问题
https://fanrenyi.com/lesson/9
在进行数据迁移时候报错: 特殊字段太长报错,
php artisan migrate
现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。
当你试着在一些MariaDB或者一些老版本的的MySQL上运行 migrations 命令时,你可能会碰到下面这个错误:
错误如下:
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
解决办法:
我们可以在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:
文件路径: /app/providers/AppServiceProvider.php,加上绿色部分即可
<?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()
{
//
}
}
三、补充知识
1、service provides(服务提供者)
Service Providers (服务提供者)
是 Laravel
「引导」过程的核心。这个「引导」过程可以理解成「电脑从按下开机按钮到完全进入桌面」这段时间系统干的事。
Service Provider
有两个重要的方法:
register() :注册服务
boot() :引导服务
Laravel
在「引导」过程中干了两件重要的事:
- 通过
Service Provider
的 register()
方法注册「绑定」,比如kernel文件中的 - 所有
Servier Provider
的 register()
都执行完之后,再通过它们 boot()
方法,干一些别的事。
2、Schema是什么
Laravel 的Schema门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、平滑的API。