MariaDB显示自10.1更新到10.5以来的错误而非警告



系统1和系统2完全相同。自从更新System 1以来,MariaDB在System 1中抛出错误(没有默认值,字符串而不是int(,这些错误以前都是警告。

没有手动更改任何设置。是否有可能在更新过程中更改的设置?我该如何检查严格的打字或任何相关内容?

系统1

  • 服务器版本:10.5.15-MariaDB-0+deb11u1-Debian 11
  • 协议版本:10
  • 数据库客户端版本:libmysql-mysqlnd 8.0.23
  • 选择@@SQL_MODE;STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

系统2

  • 服务器版本:10.1.48-MariaDB-0+deb9u2-Debian 9.13
  • 协议版本:10
  • 数据库客户端版本:libmysql-mysqlnd 8.0.13
  • 选择@@SQL_MODE;NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在系统1和系统2 上产生不同结果的上下文下方

DROP TABLE IF EXISTS `testtable`;
CREATE TABLE `testtable` (
`id` int(11) NOT NULL,
`testid` int(11) NOT NULL,
`testint` int(11) NOT NULL DEFAULT 0,
`testtext` longtext COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `testtable` (`id`, `testid`, `testint`, `testtext`) VALUES
(1, 1,  1542629089, '');
ALTER TABLE `testtable`
ADD PRIMARY KEY (`id`);
ALTER TABLE `testtable`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;

查询1

INSERT INTO `testtable` ( `testid`,`testint` ) VALUES ("19", "0");

响应系统1

INSERT INTO `testtable` ( `testid`,`testint` ) VALUES ("19", "0");
MySQL said: Documentation
#1364 - Field 'testtext' doesn't have a default value

响应系统2

1 row inserted.
Inserted row id: 11 (Query took 0.0001 seconds.)
INSERT INTO `testtable` ( `testid`,`testint` ) VALUES ("19", "0");
[ Edit inline ] [ Edit ] [ Create PHP code ]
Warning: #1364 Field 'testtext' doesn't have a default value 

查询2

INSERT INTO `testtable` ( `testid`,`testint`, `testtext` ) VALUES ("20", "", "");

响应系统1

INSERT INTO `testtable` ( `testid`,`testint`, `testtext` ) VALUES ("20", "", "");
MySQL said: Documentation
#1366 - Incorrect integer value: '' for column `wafl_client_r4apps`.`testtable`.`testint` at row 1

响应系统2


1 row inserted.
Inserted row id: 12 (Query took 0.0001 seconds.)
INSERT INTO `testtable` ( `testid`,`testint`, `testtext` ) VALUES ("20", "", "");
Warning: #1366 Incorrect integer value: '' for column 'testint' at row 1

正如文档所述,MariaDB 10.2.4除其他外还引入了STRICT_TRANS_TABLES。

STRICT_TRANS_TABLES

严格模式
具有无效或丢失数据的语句将中止并回滚,但对于非事务性存储引擎和影响多行的语句(其中无效或丢失的数据不是第一行(,MariaDB将把无效值转换为最接近的有效值,或者,如果缺少值,则插入列默认值。自MariaDB 10.2.4以来的违约。

检查您的sql_modeSELECT @@SQL_MODE;

将sql_mode更新为要保留的模式。可选全局此处

SET GLOBAL sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

相关内容

  • 没有找到相关文章