Error Code: 1292. Incorrect datetime value: '2016-03-27 02:00:00' for column ....

Stoni

Benutzer
Beiträge
5
Hallo zusammen,

knobel an einem Problem mit Zeiten herum. Ich möchte mir eine Tabelle erstellen, in der im 15min Takt immer der gleiche Wert hinterlegt ist. (Macht isoliert erst mal keinen Sinn). Später Soll mit Datensätzen gerechnet werden.

Dazu habe ich mir folgende Tabelle gebaut:

Drop table if exists `interpolated_ratedata`;

CREATE TABLE `interpolated_ratedata` (
`RecordNumber` int(10) NOT NULL AUTO_INCREMENT,
`RateInstance` int(10) NOT NULL,
`Timestamp` timestamp DEFAULT NULL,
`Data` varchar(32) DEFAULT NULL,
PRIMARY KEY (`RecordNumber`),
KEY `TLData_Instance_InterpolateTimeStamp_Index` (`RateInstance`,`Timestamp`)#,
#CONSTRAINT `TLData_FKey_Constraint` FOREIGN KEY (`TLInstance`) REFERENCES `tl` (`TLInstance`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Dann folgende Procedure geschrieben:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `generate_rate`(starttime timestamp, endtime timestamp, cost float)
BEGIN
#DECLARE CONTINUE HANDLER For 1292 #Errorhandler for Daylight Saving
#BEGIN
DECLARE acttime timestamp;

SET acttime = starttime;

WHILE acttime < endtime DO
INSERT INTO `virtual_historian`.`interpolated_ratedata`
( `RateInstance`,`Timestamp`,`Data`)
VALUES
( 1, acttime, DATA);
SET acttime = timestampadd(MINUTE,15,acttime);
END WHILE;
#END; #Error Handler 1292
END


und aufgerufen:

CALL `virtual_historian`.`generate_rate`('2016-01-01', '2016_12_31', 0.285);

Ich erhalte folgenden Fehler:

19:41:38 CALL `virtual_historian`.`generate_rate`('2016-01-01', '2016_12_31', 0.285) Error Code: 1292. Incorrect datetime value: '2016-03-27 02:00:00' for column 'acttime' at row 2 1.295 sec

Das Datum dürfte die Sommerzeitumstellung sein. Mit welchem Trick kann man das umgehen?
 
Zuletzt bearbeitet:
Werbung:
MySQL funktioniert deutlich besser, wenn man es ganz kurz vor Anwendung gegen eine besser funktionierende Datenbank austauscht ;-)

Code:
select '2017-01-01 00:00:00'::timestamp + '15 minutes'::interval * s from generate_series(0, 24 * 4 * 365 -1) s;
 
UNGLAUBLICH!
Es ist 2024, und genau dieser Fehler tritt auch bei MariaDB 10-11 auf:
ich bin gerade dabei, mehrere zehntausend Inserts in eine Tabelle zu machen,

DROP TABLE IF EXISTS `xyz`;
CREATE TABLE IF NOT EXISTS `xyz` (
`id_...` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
...
`dat_create` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`dat_change` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id_...`)
) ENGINE=MyISAM AUTO_INCREMENT=42166 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Description' PACK_KEYS=1;

und bei Werten am 27.03.2016 zwischen 02:00:00 und 02:59:59 bekomme ich:

Error Code: 1292. Incorrect datetime value: '2016-03-27 02:xx:xx' for column `dat_change`

Wenn ich das Datum um eine Stunde erhöhe, läuft das problemlos durch!!!

In was für einer Welt leben wir denn?????
 
UNGLAUBLICH!
Es ist 2024, und genau dieser Fehler tritt auch bei MariaDB 10-11 auf:
ich bin gerade dabei, mehrere zehntausend Inserts in eine Tabelle zu machen,
Oft liegen solche Fehler auch genau zwischen der linken und rechten Hand der Entwicklers :)


1) Schmeiss erst mal die uralte Engine MyISAM raus und nutze InnoDB
2) Bei MariaDB gibt es auch die Sequel Engine mit der du du Tabelle füllen kannst
3) Die Zeile die den Fehler macht zeigst du gar nicht :-(

Da hilft dann nur noch die Glaskugel
 
Werbung:
Zurück
Oben