2009-03-23 7 views
0

Existe-t-il une solution pour le problème '0000-00-00 00:00:00', sans changement de table?Ruby: Problème d'horodatage/datetime Mysql

je "[]" dans cette requête:

dbh.select_all("select j.n, j.name, j.dsc, j.flag, j.td from job j where j.td='0000-00-00 00:00:00'") 

Je regarde solution pour cela: http://rubyforge.org/tracker/index.php?func=detail&aid=22243&group_id=234&atid=967

+0

Pouvez-vous être plus clair sur le problème que vous rencontrez? –

+0

http://rubyforge.org/tracker/index.php?func=detail&aid=22243&group_id=234&atid=967 – amirka

Répondre

2

Votre valeur par défaut est '0000-00-00 00:00:00' et vous ne pouvez pas la modifier. Je déterré ma liste de diffusion ruby-dbi archives et a trouvé l'explication suivante:

Le problème avec ce dernier cas est qu'il ne peut être contraint à un objet DateTime parce que ce n'est pas un temps valide. .. Honnêtement, je suis surpris mysql le permet du tout. De toute façon, vous devez désactiver la conversion de type (voir DBI.convert_types=) pour obtenir cette valeur par défaut au travail ou à changer et toutes les occurrences dans votre base de données ou utilisez bind_coltype pour traiter comme chaîne au lieu .

Voir this mailing list archive.

+0

grâce, DBI.convert_types = false résoudre problème – amirka

0

Je déclare habituellement mes datetimes comme acceptant NULL, par exemple:

dtime DATETIME NULL DEFAULT NULL 

De cette façon, je peux vérifier si un champ est NULL plutôt que si un champ = '0000-00-00 00:00:00'.

+0

Je ne peux pas changer la table, il y a beaucoup de gens qui travaille avec elle – amirka

0

Vous pouvez simplement lancer le "0000-00-00 00:00:00" à NULL:

SELECT IF (mytime = "0000-00-00 00:00:00", NULL, mytime) FROM mytable;