MySQL SUR la mise à JOUR CURRENT_TIMESTAMP pas de mise à jour

J'ai une table qui ressemble à ceci:

CREATE TABLE IF NOT EXISTS `Hosts` (
`id` int(128) NOT NULL AUTO_INCREMENT,
`IP` varchar(15) NOT NULL DEFAULT '',
`Port` varchar(5) NOT NULL DEFAULT '',
`Password` varchar(32) NOT NULL DEFAULT '',
`Username` varchar(32) NOT NULL DEFAULT '',
`Tid` varchar(32) NOT NULL DEFAULT '',
`EquipType` varchar(64) NOT NULL DEFAULT '',
`Version` varchar(128) DEFAULT NULL,
`Status` varchar(10) NOT NULL DEFAULT '',
`Location` varchar(128) NOT NULL DEFAULT '',
`Lastconnection` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`Lastbackup` date NOT NULL DEFAULT '0000-00-00',
`Backupstatus` varchar(64) NOT NULL DEFAULT '',
`Backupmsg` text,
`Backupfile` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `IP` (`IP`),
KEY `Tid` (`Tid`),
KEY `EquipType` (`EquipType`),
KEY `Status` (`Status`),
KEY `Lastbackup` (`Lastbackup`),
KEY `Backupstatus` (`Backupstatus`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=716 ;

Dans mon esprit, cela signifie que chaque fois qu'une ligne est mise à jour, le champ 'Lastconnection" doit être estampillé avec le timestamp actuel. Cependant, lorsque je lance quelque chose comme:

update Hosts set Backupstatus = 'FAIL',  Backupmsg = 'Connection timed out' where Tid = 'SITE001'

Lastconnection reste '0000-00-00 00:00:00'. Il y a soit un problème de base de données, je ne vois pas, ou alors je suis complètement à l'incompréhension la mise à JOUR CURRENT_TIMESTAMP clause.

  • Quelle est votre version? Je demanderai seulement à cause de ce rapport de bug: bugs.mysql.com/bug.php?id=28904
  • On dirait que j'ai 5.1.40.
  • Que le ts de la colonne que vous le rapport est rempli avec '0000-00-00 00:00:00' ne contredisent je suppose qu'il pourrait avoir qch. à voir avec le NO_ZERO_DATE mode, mais jetez un oeil à dev.mysql.com/doc/refman/5.0/en/...
  • Je pense que peut être il. De nombreuses lignes sont estampillés correctement, mais certains peuvent avoir des valeurs en double. Je vais essayer une mise à niveau.
  • Utiliser la valeur null pour la colonne datetime dans la requête a fonctionné pour moi.
  • selon dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html le timestamp actuel sera mise à jour que si l'une des valeurs dans les modifications de la ligne (c'est à dire si toutes les valeurs restent les mêmes, les lastconnection colonne ne sera pas mise à jour, même si vous exécutez UPDATE requête)

InformationsquelleAutor coding_hero | 2011-04-06