jueves, 16 de agosto de 2012

Cuidado con los Campos Fecha en Sqlite

Como bien explican en la página de sqlite, los valores almacenados en los campos están más asociados con el valor del registro que con el tipo de campo, esto es una de sus desventajas... porque tienes que prevalidar una entrada antes de guardar los datos.

En MySQL por ejemplo: una valor entero enviado como '1' se graba como 1 o se rechaza, dependiendo de la configuración. En SQLite es diferente: Un Valor enviado como '1' se graba '1'... esto es explicado en el párrafo anterior.

Es un problema??? si. y no... si: para quienes acostumbran enviar su datos "raw"... como yo. No: Si prevalidas todas tus entradas de datos.

El inconveniente es al trabajar con campos fechas, especialmente, pues cuando tu envías un dato como "2008-12-1" es Motor SQL no lo toma como fecha, si no como un simple string, veamos unos ejemplos:
Así, todas tus fechas guardadas con un patrón conocido (el más ideal sería fecha ISO "YYYY-MM-DD") y hacer las operaciones necesarias para trabajarlos en el lenguaje conveniente.

Esto francamente viene a ser un problema, pues el trabajo de prevalidación es mucho, sin embargo hay que hacerlo y tenerlo en cuenta, ya que SQLite se perfila como el Estandar en la Industria.

Así que si te confías al diseñar tu Base de datos te ocurrirá lo que a mí: Tener que parchar la DB y prevalidar estrictamente tus entradas.

Al final yo recomendaría manejar las fechas como epoch o un entero y convertirlo en fecha para su uso diario.

Algunos Links  de Ayuda:

Tipos de datos en SQLite3.
Funciones de Fechas y Conversión de Tiempo.
Trabajando con Cadenas en SQLite.
Datos ISO.


2 comentarios:

Anónimo dijo...

Saludos gracias por compartir, me desisti de usar sqlite3, resulta que ni en mi ordenador ni en mi hosting logré hacer andar sqlite3. Me gustaba para usarlo como complemento de mysql.

Saludos

pata_de_jaguar dijo...

Hola, puedes usar MongoDB, CouchDb, etc... y lo combinas al estilo de un cache. Yo lo uso para almacenar el resultados de consultas complejas de MySQL... SQLite se debe tratar más como un archivo que con una Base de datos.