2017-05-31 5 views
0

Dies könnte eine Funktion anstelle eines Fehlers sein, also dachte ich, dass ich es auf SO anstelle von MariaDBs Jira aufnehmen sollte.Automatisches Casting von Standardwerten beim Einfügen

Gestern habe ich meine MariaDB Installation auf Homebrew von 10.1.23 auf 10.2.6 aktualisiert. Alle meine Selects funktionieren immer noch korrekt, aber jetzt, in meiner Legacy-App, erhalte ich eine Reihe von Fehlern bei Einfügungen, bei denen der Code "annimmt", dass MariaDB einen Standardwert setzt. Zum Beispiel ...

INSERT INTO table SET 
    email = '[email protected]', -- varchar 
    phone_number = '', -- bigint 
    ts = '2017-05-30 23:51:23', -- datetime 
    some_val = '689728' -- varchar 

Dieser Code wurde fein vor der Arbeit, aber da ich jetzt aufgerüstet habe ich die folgenden zwei Fehler auftreten ...

Fehler 1 (is_some_toggle ist ein tinyint und ist nicht oben in der Abfrage definiert ist, wird angenommen, dass MariaDB nur

Field 'is_some_toggle' doesn't have a default value 

Fehler 2 (nachdem ich das Standardwert is_some_toggle)

Incorrect integer value: '' for column 'phone_number' at row 1 
) würde einfügen

Ich vermute, das ist eine Funktion, kein Fehler. Ich habe durch ihre changelogs für 10.2 Reihe geschaut und ich sehe nicht, dass etwas heraus springt, aber es gibt viel, also könnte ich es verpasst haben. Ich sah eine Serverkonfiguration für OLD_SQL, aber das schien nicht das zu sein, wonach ich suchte. Irgendwelche Gedanken?

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 
+0

Bitte geben Sie 'SHOW CREATE TABLE' an. –

Antwort

1

Sieht aus wie durch die Changelog gehen sehr langsam für mich gearbeitet.

sql_mode wurde aktualisiert, wie in this article beschrieben wurde.

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 

Ich änderte es zurück zum Standard und ich bin gut wie Gold.

Verwandte Themen