LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071
Posted
技术标签:
【中文标题】LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071【英文标题】:LUMEN : How to fix the SQLSTATE[42000]: Syntax error or access violation: 1071 on laravel lumen 【发布时间】:2019-07-26 05:38:58 【问题描述】:我用 lumen 框架开始了一个 php 项目。
当我尝试从控制台执行命令php artisan migrate:fresh
时,出现以下错误
SQLSTATE[42000]:语法错误或访问冲突:1071
这是 Laravel 中的一个众所周知的错误,但这个问题不是重复的,因为在 lumen 上没有引导方法,正如 documentation 所说:
Laravel 默认使用 utf8mb4 字符集,其中包括支持在数据库中存储“表情符号”。如果您运行的 mysql 版本早于 5.7.7 版本或 MariaDB 版本早于 10.2.2 版本,您可能需要手动配置迁移生成的默认字符串长度,以便 MySQL 为其创建索引。您可以通过在 AppServiceProvider 中调用 Schema::defaultStringLength 方法来配置它。
但是,当我尝试在微框架 Lumen 中使用此修复程序时,错误仍然存在。
【问题讨论】:
您使用的是什么版本的 MySQL / MariaDB?你能告诉我们你的尝试以及你在哪里做的吗? Laravel migration: unique key is too long, even if specified的可能重复 【参考方案1】:在 Lumen 中,您还必须取消注释该行:
$app->register(App\Providers\AppServiceProvider::class);
在 bootstrap/app.php
【讨论】:
【参考方案2】:这个错误基本上是因为你没有在boot()
函数中设置defaultStringLength
[PDOException] SQLSTATE[42000]:语法错误或访问冲突:1071
解决方案:
只需在 app/Providers/AppServiceProvider.php 方法中添加以下代码:
use Illuminate\Support\Facades\Schema;
public function boot()
Schema::defaultStringLength(191);
【讨论】:
只有我的意见:我不喜欢这个解决方案,因为它将string
列从 255 个字符减少到 191 个字符。当我曾经遇到同样的错误时(我想我们都这样做了:))我选择了this answer 我不需要在所有验证中将max:255
更改为max:191
,然后在我升级MariaDB 时返回。而这个答案实际上解决了问题,而不是提供修复。
引导方法必须在类里面? @UdhavSarvaiya
github.com/laravel/laravel/blob/master/app/Providers/… 在这里查看
@UdhavSarvaiya 是的,这就是我所做的,但没有解决问题
@cbaconnier 问题是lumen里面没有config/database.php以上是关于LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071的主要内容,如果未能解决你的问题,请参考以下文章
如何在 lumen 5.8.* 中使用 dingo 修复实现 jwt?目标 [Dingo\Api\Contract\Routing\Adapter] 不可实例化
如何修复 SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列
如何修复 SQLSTATE [42704]:未定义对象:7 错误:数据类型 json 在heroku 托管中没有访问方法“btree”的默认运算符类
如何修复错误不兼容的数据类型组合 [SQL State=42562, DB Errorcode=-5562]
Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytes