IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
一、总结
一句话总结:
在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:Schema::defaultStringLength(191); 还有记得引入Schema
1 <?php 2 3 namespace AppProviders; 4 5 use IlluminateSupportServiceProvider; 6 use IlluminateSupportFacadesSchema; 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】 IlluminateDatabaseQueryException : 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
转自或参考:【laravel5.6】 IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
https://www.cnblogs.com/richerdyoung/p/9167078.html
在进行数据迁移时候报错: 特殊字段太长报错,
php artisan migrate
现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。
当你试着在一些MariaDB或者一些老版本的的MySQL上运行 migrations 命令时,你可能会碰到下面这个错误:
错误如下:
IlluminateDatabaseQueryException : 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 AppProviders; use IlluminateSupportServiceProvider; use IlluminateSupportFacadesSchema; 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。