如何在 MySQL 8 for Laravel 中永久更改 sql_require_primary_key 值?

Mid*_*abu 5 mysql primary-key laravel digital-ocean mysql-8.0

我最近在 Digital Ocean 创建了一个数据库服务器,它仅支持 MySQL 8。当我尝试导入 Laravel 项目的数据库时,它报告以下错误:

设置系统变量“sql_require_primary_key”时,无法创建或更改没有主键的表。

所以我尝试通过运行命令将 mySQL Server 中的 sql_require_primary_key 更改为 OFF,

设置 sql_require_primary_key = 关闭;

并且更改成功,但是之后又自动恢复到之前的设置。

在 Laravel 中,一些主键是在创建表后设置的,因此在迁移时会显示错误。这是我的实时项目,因此我无法修改已经创建的迁移。

有人知道如何在 MySQL 8 上永久更改 sql_require_primary_key 吗?

Jam*_*ner 6

一个临时的解决方法是sql_require_primary_key为 Laravel 项目添加关闭,您可以为每个数据库连接添加一条语句。

在里面Illuminate/Session/Console/stubs/database.stub,添加上面的内容Schema::create()

use Illuminate\Support\Facades\DB;
DB::statement('SET SESSION sql_require_primary_key=0');
Schema::create('sessions' ...
Run Code Online (Sandbox Code Playgroud)

完成迁移和恢复后,您可以删除此更改。

如果您使用 Digital Ocean 的 API,这里有关于 API 的文档。或者,您可以联系他们的支持人员,为您的服务器关闭该要求。