MySQL/MariaDB 配置警告以抛出错误

MySQL/MariaDB Configure Warnings to throw Errors

提问人:G M 提问时间:10/30/2021 最后编辑:G M 更新时间:10/30/2021 访问量:580

问:

我需要MySQL / MariaDB抛出错误消息而不是警告消息。

原因:在我的开发环境中,SQL/PHP 中的警告被忽略(并且 SQL 和 PHP 都会继续处理),因此我在测试时无法检测到任何问题。但是,在生产环境中,所有警告都会使查询崩溃,从而终止 API,并向用户返回“失败”消息。

这是一个非常糟糕的结果,过去引起了许多头痛。

这是一个非常具体的场景,它导致了许多问题:

我有一个表“testtable”,其中有两列“pk”和“bRequiredBoolean”,其中 pk 是主键(因此自动递增),bRequiredBoolean 没有默认值:

CREATE TABLE `test`.`testtable` ( `pk` INT NOT NULL AUTO_INCREMENT , `bRequiredBoolean` BOOLEAN NOT NULL , PRIMARY KEY (`pk`)) ENGINE = InnoDB;

在我的开发服务器中,我可以运行以下查询:

INSERT INTO `testtable`() VALUES ()

并收到以下警告:

Warning: #1364 Field 'bRequiredBoolean' doesn't have a default value

在我的开发服务器中,条目 IS INSERTED 并且 API 继续执行。

在我的生产服务器中,条目 ISN'T INSERTED 并且 API 崩溃。

我知道开发/测试服务器应该相同以防止出现此类问题,但我目前没有资金购买额外的许可证,因此我想要一种替代解决方案来抛出错误消息而不是警告,以捕获上述情况。

重要提示:我不想在每个查询中插入任何额外的代码,我更喜欢编辑一些配置文件。例如,我不想将以下代码添加到每个查询中:

SHOW COUNT(*) WARNINGS

我宁愿编辑一些配置文件,这样它总是会抛出错误,即使我直接通过 GUI 进行临时查询。

我发现了其他类似的问题,但没有人回应这些线程:

MariaDB显示警告而不是错误

在mysql警告pdo上抛出错误

任何帮助都非常感谢。

MySQL Xampp MariaDB 警告

评论

1赞 Barmar 10/30/2021
比较两种环境中的SQL_MODE。
0赞 G M 10/30/2021
非常感谢Barmar!这正是我解决问题所需要的。我在下面添加了解决我问题的官方答案。

答:

0赞 G M 10/30/2021 #1

多亏了 Barmar 的评论,我找到了解决问题的方法。

您可以通过以下方式查看您的SQL_Mode:

SELECT @@SQL_MODE;

显然,有一个SQL_Mode设置专门为所有警告抛出错误,称为“传统”

您可以查看 mySQL 官方网站以获取有关SQL_Mode值的更多信息: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-full

因此,我运行了以下查询:

SET GLOBAL sql_mode = 'TRADITIONAL';

运行查询后,我执行了与之前相同的查询:

INSERT INTO `testtable`() VALUES ()

并收到以下错误:

Error
SQL query: Copy


INSERT INTO `testtable`() VALUES ();
MySQL said: Documentation

#1364 - Field 'bRequiredBoolean' doesn't have a default value

这正是我所需要的。非常感谢@Barmar!

评论

0赞 nbk 10/30/2021
这将 szillnot 将所有警告显示为错误 stackoverflow.com/questions/4289205/...