Thursday, March 27, 2008

Es un bug o una caracteristica?


Por ahi estoy inscrito a una listita de correos (PostgreSql), y me llego uno donde mostraban cierto comportamiento no deseado de este gestor de bases de datos (Mysql).

mysql> create table foo(fecha date);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into foo values('2008-02-31');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> insert into foo values('0000-00-0');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from foo;
+---------------+
| fecha |
+---------------+
| 0000-00-00 |
| 0000-00-00 |
+---------------+
2 row in set (0.01 sec)

Creo que no necesita explicación a lo que esta sucediendo en los cuadros, incluso tambien inserté puros caracteres y los aceptó (que raro!), imagínense cuanta falta de integridad de datos. :)

Ahh!!!, pero se puede cambiar ese comportamiento en tu configuración o en tu cliente:

SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE';

Que es, según esto, es equivalente a:

SET sql_mode = 'TRADITIONAL';

Pero no es default!!!!.

En postgres ya sabemos lo que pasa:

dbtest=# create table foo(fecha date);
CREATE TABLE
dbtest=# insert into foo values('2008-02-31');
ERROR: el valor de hora/fecha está fuera de rango: «2008-02-31»
dbtest=#

No comments: