mysql - 如何在 Laravel 的 MySQL 8 中永久更改 sql_require_primary_key 值?

标签 mysql laravel primary-key digital-ocean mysql-8.0

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

Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set.

所以我尝试通过运行命令在 mySQL 服务器中将 sql_require_primary_key 更改为 OFF,

设置 sql_require_primary_key = off;

并且修改成功,但是之后又自动回到之前的设置。

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

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

最佳答案

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

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' ...

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

如果你使用 Digital Ocean 的 API,有 documentation on the API here .或者,您可以联系他们的支持人员为您的服务器关闭该要求。

关于mysql - 如何在 Laravel 的 MySQL 8 中永久更改 sql_require_primary_key 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66149804/

相关文章:

database - Oracle:查找主键 - PK 和 NN

java - 在 Eclipse 中运行程序时,使用 Hibernate 的 Eclipse 不加载 mysql 驱动程序 jar

php - mysqli:连接和查询以及效率

laravel - Curl 和 Laravel,总是重定向

Laravel 5.3 向没有帐户的用户发送通知

php/mysql CI 每当我将数据插入子表时,它不会存储父表的 id

mysql - 使用查询来确定表名

mysql - 应该使用什么类型的数据库来存储数百万家餐馆并对其进行查询

php - Laravel 6-7 如何覆盖/更改供应商类?

sql-server-2005 - SQL Server 2005中插入行后的主键值