2017-05-31 53 views
0

這可能是一個功能,而不是bug,所以我認爲它包含在SO而不是MariaDB的Jira中。插入缺省值的自動轉換

昨天我把自己的MariaDB安裝在10.1.23的Homebrew上更新到了10.2.6。我所有的選擇仍然正常工作,但現在在我的遺留應用程序中,我在代碼「假定」MariaDB將設置默認值的插入時遇到一些錯誤。例如...

INSERT INTO table SET 
    email = '[email protected]', -- 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 

我猜這是一個功能,而不是一個錯誤。我查看了他們的changelogs 10.2系列,我沒有看到任何東西跳出來,但有很多,所以我可能錯過了它。我看到OLD_SQL的一個服務器配置,但這似乎並不是我想要的。有什麼想法嗎?

MACOS塞拉利昂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 
+0

請提供'SHOW CREATE TABLE'。 –

回答

1

貌似通過changelog的很慢很適合我去。

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 

我改回它的默認值,我很好。