![]() |
Mysql, años bisiestos y divisiones por cero
Al parecer, mySQL tiene problemas con los años bisiestos. Si usas controles Data-Aware o sentencias parametrizadas desde delphi, ¡suerte que delphi te ayuda!, pero si estas construyendo sentencias SQL de puro texto (probablemente para importar datos desde otras fuentes, ¡mucho cuidado!
Este es el resultado de un experimento realizado sobre oracle, PostgreSQL, DB2, firebird y mysql: Años bisiestos Oracle: Código:
SQL> CREATE TABLE leaptest (thedate date);PostgreSQL: Código:
goods=> CREATE TABLE leaptest (thedate date);DB2 Código:
db2 => CREATE TABLE leaptest (thedate date)Firebird: Código:
SQL> CREATE TABLE leaptest (thedate date);MySQL: Código:
mysql> CREATE TABLE leaptest (thedate date);Alguién ha indicado que si se usa fechas en formato ISO trabajaría: Código:
INSERT INTO leaptest VALUES ('2008-02-28');Resultado de la prueba: NO satisfactorio. División por cero Oracle Código:
SQL> SELECT 0/0 FROM dual;PostgreSQL Código:
goods=> SELECT 0/0;DB2: Código:
db2 => SELECT 0/0 FROM cmihai.leaptestFirebird: Código:
SQL> SELECT 0/0 FROM rdb$database;MySQL Código:
mysql> SELECT 0/0;Las versiones utilizadas para el experimento son: DB2 9.5, Oracle 10g and 11g, PosgreSQL 8.2, 8.3 Firebird 2 MySQL 5.0.45. enlace |
Cita:
Código:
INSERT INTO leaptest VALUES ('2008-02-29');Código:
INSERT INTO fecha VALUES ('2009-02-29');Hasta Luego .- |
Hay algunos puntos que observar:
MySQL no acepta fechas en formato 'libre' en una sentencia INSERT como las indicadas. No importa si le ponen 29-feb-2008 o 10-sep-2005, MySQL almacenará 0000-00-00. Es decir, no se trata de un manejo incorrecto de años bisiestos. Si se introducen fechas en el formato que MySQL entiende, que es el que indica lucasarts_18, las fechas se almacenan correctamente. En la versión 4, según indica el manual: Cita:
No sé en la versión 5 como sea, aunque el manual menciona que debe dar una advertencia. De todas formas, no creo que pueda aducirse que maneja mal las excepciones, simplemente han decidido almacenar valores como 0000-00-00 o NULL (en el caso de 0/0) para valores erróneos. Es una decisión, no un error. Bye |
Cita:
Cita:
Por último mysql maneja diversos "modos" y pueda que no lo tenga configurado como tal para que me levante tal advertencia, pero esto ya escapa de mis manos, y es que leerme el manual de mysql, que por decirlo de alguna manera "me da un poco de pereza" :o, empero, prefiero la documentación de php que va directo al grano. Hasta Luego .- |
| La franja horaria es GMT +2. Ahora son las 14:13:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi