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”的默认运算符类

在 Lumen 中执行迁移时未设置表名

如何修复错误不兼容的数据类型组合 [SQL State=42562, DB Errorcode=-5562]

Lumen 5.6 Migrate Error Specified key was too long max key length is 767 bytes