在插入时自动转换默认值

时间:2017-05-31 00:06:26

标签: macos homebrew mariadb

这可能是一个功能而不是bug,所以我想把它包含在SO而不是MariaDB的Jira上。

昨天我将Homebrew上的MariaDB安装从10.1.23更新到10.2.6。我的所有选择仍然正常,但现在在我的遗留应用程序中,我在插入时得到一堆错误,其中代码是“假设”MariaDB将设置默认值。例如......

INSERT INTO table SET 
    email = 'some@email.com', -- varchar
    phone_number = '', -- bigint
    ts = '2017-05-30 23:51:23', -- datetime
    some_val = '689728' -- varchar

此代码之前工作正常,但自从我升级后,我现在得到以下几个错误......

错误1(is_some_toggle是一个tinyint,在上面的查询中没有定义,假设MariaDB只插入一个0)

Field 'is_some_toggle' doesn't have a default value

错误2(在我将默认值设置为is_some_toggle之后)

Incorrect integer value: '' for column 'phone_number' at row 1

我猜这是一个功能,而不是一个bug。我已经通过他们的changelogs查看了10.2系列,我没有看到任何跳出来,但有很多,所以我可能错过了它。我看到了OLD_SQL的服务器配置,但这似乎不是我想要的。有什么想法吗?

macOS Sierra 10.12.5 btw

CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(200) NOT NULL,
  `phone_number` bigint(20) NOT NULL,
  `some_val` varchar(6) NOT NULL,
  `ts` datetime DEFAULT NULL,
  `is_some_toggle` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `email_code` (`email`(15),`some_val`),
  KEY `phone_number_code` (`phone_number`,`some_val`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

1 个答案:

答案 0 :(得分:1)

看起来像浏览更改日志非常慢慢地为我工作。

sql_mode已根据this article中的概述进行了更新。

Option      |    Old default value                               |    New default value
sql_mode    |    NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION     |    STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

我把它改回了默认值,我很高兴。