Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Skeletron en 12 Octubre 2009, 23:03 pm



Título: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 12 Octubre 2009, 23:03 pm
Hola gente.. Resulta que en un psot de por allí, se me planteó un problema con el tema de los datos BOOLEAN y de DATE en SQLite ( http://www.sqlite.org/ )


Alguien sabe, conoce exactamente cuales son los tipos de datos de SQLite??? y cuanto ocupa cada uno??
Estaria bueno que pasen alguna tabla :D

Y en caso de que alguien utilice mucho sqlite, y conozca sobre que como conviene guardar fechas, le comento que estoy guardando en un campo: CURRENT_DATE las fechas (las ingreso así: YYYY-MM-DD)
Vi por ahí que hay diferentes tipos, estaba el DATE, CUrrent_date y otros cuantos mas... El Current_date es el mejor?? (no m convence el nombre)

Ya que cuando creé una columna de valores DATE, y le mandé: "YYYY-MM-DD" me devolvió esos valores, mas el horario (00:00:00)

Saludos!


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 13 Octubre 2009, 22:19 pm
Las bases de datos relacionales utilizan el mismo tipo de datos primitivos que vemos en programacion + los 'extras' desarrollados por cada DB llamados tipos de datos ANSI SQL.

Pero te hablare de los generales y comunes en todas:

CHAR - 1 byte en memoria
VARCHAR - 2 byte + 1 en memoria
FLOAT - 4 bytes en memoria
INTEGER - 4 bytes en memoria
DOUBLE/REAL - 8 bytes en memoria
DATE - 3 bytes en memoria
TIME - 3 bytes en memoria
YEAR - 1 byte en memoria
DATETIME - 8 bytes en memoria
TIMESTAMP - 4 bytes en memoria
BOOLEAN - 1 byte en memoria

No confundas cantidad de memoria que ocupa un tipo de dato, a tamanio de almacenamiento de un campo. Por ejemplo el siguiente campo:

nombre char(20)

el tipo de dato al ser CHAR en memoria fisica (memoria ram) ocupa 1 byte, sin embargo los registros que insertes ocuparan 20 bytes en cache y disco duro  ;) (sobretodo porque CHAR es un tipo de dato estatico no dinamico) Y lo mismo ocurre con cualquier tipo de dato.

No conozco que tipo de dato maneja CURRENT_DATE (ya que en otras DB es una funcion) pero por lo que muestras, pareciese que es o DATETIME o TIMESTAMP, yo te recomendaria que utilizes y definas tu mismo el campo con tu tipo de dato fecha.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 13 Octubre 2009, 22:33 pm
Entonces tengo cualquier cosa guardada como FECHA...
Como me recomiendan guardar las fechas entonces??'
Como u campo TEXT y listo???


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 13 Octubre 2009, 22:43 pm
No dije especificamente que tienes cualquier cosa guardada como fecha, sino que yo particularmente desconozco en SQLite si la funcion CURRENT_DATE maneja los datos como DATETIME o TIMESTAMP (fisicamente los datos son mostrados iguales, pero internamente un tipo de dato ocupa 8 bytes el otro 4 bytes)

No puedes ingresar una fecha en tipo de dato TEXT (no hice mencion de TEXT ya que no todas las DB tienen este personalizado tipo de dato ANSI, esto hazta lo que se es de MySQL) Yo solo hice mencion de los tipos de datos globales que se que todas las DB relacionales ANSI SQL compatibles utilizan. No es que no puedas insertar una fecha en el tipo de dato TEXT porque puedes (aunque tu mismo tendrias que ponerle la sintaxis 00-00-000) sino porke este tipo de datos maneja caracteres no binarios. Deberias utilizar depende tus necesidades, pero podrias considerar el tipo de dato DATE.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: seba123neo en 14 Octubre 2009, 04:53 am
he estado viendo algo de SQLlite y vi que no se puede hacer algo como dijo ^TiFa^  :-*..... de hacer nombre char(20) en la misma pagina oficial lo dice, que por mas que pongas nombre char(20) podes escribir lo que quieras...es eso verdad? o estoy equivocado? pero si la pagina lo dice.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 14 Octubre 2009, 05:47 am
Bueno, pero.. y al final.. que "VARIABLE" me conviene para guardar Fechas que le paso como parametro como STRING.. o sea.. sin metodos apra obtener la fecha actual... yo mismo le digo desde un campo (textarea) que la fecha es 2009-10-20

En que variable tendria que guardarla?? en una de texto comun?? en una de DATE..?? diganme.. que me recomiendan :)


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: seba123neo en 14 Octubre 2009, 06:19 am
guardala en cualquiera de las 2, yo te diria en un string por ejemplo, total despues si necesitas hacer operaciones de fecha, la convertis con CDate() y listo, pero para cuando quieras guardar en la base la fecha, guardarla desde en una string...formateada al formato correspondiente...

saludos.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 14 Octubre 2009, 06:30 am
Perefcto...

Al fin y al cabo, no se ha respondido la pregunta numero 1..
Cuales son lso tipos de datos que se guardan en SQLite
No creo que sean SOLAMENTE: http://www.sqlite.org/datatype3.html
Esos pocos que aparecen ahí..
O será así?!?!?
Nada de VARCHAR, ni nada de eso.. TEXT, REAL, BLOB, e INTEGER.. y nada mas.. Será realmente así?


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 14 Octubre 2009, 14:12 pm
Todas las bases de datos relacionales y compatibles al ANSI SQL poseen los siguientes tipos de datos (Esto es general en todas):

Citar
CHAR - 1 byte en memoria
VARCHAR - 2 byte + 1 en memoria
FLOAT - 4 bytes en memoria
INTEGER - 4 bytes en memoria
DOUBLE/REAL - 8 bytes en memoria
DATE - 3 bytes en memoria
TIME - 3 bytes en memoria
YEAR - 1 byte en memoria
DATETIME - 8 bytes en memoria
TIMESTAMP - 4 bytes en memoria
BOOLEAN - 1 byte en memoria


Citar
Al fin y al cabo, no se ha respondido la pregunta numero 1..
Cuales son lso tipos de datos que se guardan en SQLite

Ya te respondi, y vuelvo y te lo pego en esta respuesta mas arriba. Inclusive te hice una explicacion ligera sobre cuanto bytes en memoria ram ocupan cada tipo de datos. Y te hice una clarificacion de cual te convenia, pero aparentase que no comprendes del todo lo que intento exponerte.


Citar
Nada de VARCHAR, ni nada de eso.. TEXT, REAL, BLOB, e INTEGER.. y nada mas.. Será realmente así?

SQLite posee CHAR, VARCHAR esos dos tipos de datos son primitivos, todas las bases de datos relacionales y compatibles al ANSI SQL lo poseen.

Citar
he estado viendo algo de SQLlite y vi que no se puede hacer algo como dijo ^TiFa^  :-*..... de hacer nombre char(20) en la misma pagina oficial lo dice, que por mas que pongas nombre char(20) podes escribir lo que quieras...es eso verdad? o estoy equivocado? pero si la pagina lo dice.

Porsupuesto que se puede. Si yo hago:

CREATE TABLE TABLA(
nombre char(20));

Y en mi programa o script puedo insertar 50 caracteres y alegrarme y decir yupi :D engane a la base de datos, le puse de almacenamiento a dicho campo nombre solo 20 y inserte 50 soy un genio !!!   ;-)  Y cuando ingreses a la base de datos y hagas un SELECT nombre from TABLA veras algo muy curioso.... y diras pero que paso??? yo inserte 50 caracteres y esta cosa me lo corto a 20 caracteres  :(   :(  Sinceramente.... no voy a opinar en un tema tan simple como son los tipos de datos y como el motor maneja la cantidad de almacenamiento.

Citar
guardala en cualquiera de las 2, yo te diria en un string por ejemplo, total despues si necesitas hacer operaciones de fecha, la convertis con CDate() y listo, pero para cuando quieras guardar en la base la fecha, guardarla desde en una string...formateada al formato correspondiente...

Eso es irrelevante, porque tiene que convertir tipos de datos cuando YA EXISTE un tipo de dato fecha en las base de datos relacionales??? como le dije anteriormente y vuelvo y le repito amigo para el campo fecha utilize el tipo de datos DATE si solamente desea insertar el año utilize YEAR y si solo quiere la hora utilize TIME... es tan complicado entender esto???



Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 14 Octubre 2009, 14:23 pm
y otra cosilla el tipo de dato TEXT que aunque maneje caracterescomo VARCHAR o CHAR, tiene caracteristicas que lo limitan entre estas:

1 - Si algun dia quieres portar tus tablas a otro motor de base de datos como ORACLE por ponerte un ejemplo, tendras que alterar el campo tipo TEXT a CHAR o VARCHAR ya que TEXT no va en ORACLE. (No es portable digamos)

2 - TEXT no soporta datos DEFAULT como CHAR o VARCHAR si

3 - (No se aca como SQLite maneje este punto) pero hasta lo que conozco en otras DB, para crear indices  en tipo de datos TEXT hay que especificarle un tamanio (cosa que no aplica en CHAR o VARCHAR).

Creo que leer un poco sobre introduccion a lenguaje SQL no caeria nada mal.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 15 Octubre 2009, 02:15 am
Ahh.. ok. perfecto, me quedo claro..
Son las que nombraste, mas las que aparecen en la documentacion de SQLite...
Gracias amigo..


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: seba123neo en 15 Octubre 2009, 02:27 am
Porsupuesto que se puede. Si yo hago:

CREATE TABLE TABLA(
nombre char(20));

Y en mi programa o script puedo insertar 50 caracteres y alegrarme y decir yupi :D engane a la base de datos, le puse de almacenamiento a dicho campo nombre solo 20 y inserte 50 soy un genio !!!   ;-)  Y cuando ingreses a la base de datos y hagas un SELECT nombre from TABLA veras algo muy curioso.... y diras pero que paso??? yo inserte 50 caracteres y esta cosa me lo corto a 20 caracteres  :(   :(  Sinceramente.... no voy a opinar en un tema tan simple como son los tipos de datos y como el motor maneja la cantidad de almacenamiento.

en la pagina dice esto:

Código:
SQLite does not enforce the length of a VARCHAR. You can declare a VARCHAR(10) and SQLite will be happy to let you put 500 characters in it. And it will keep all 500 characters intact - it never truncates.

te digo lo que hice, cree una tabla con un campo varchar(50), le agrege 100 caracteres por lo menos...hice un select y me trajo tal cual los 100.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: Skeletron en 15 Octubre 2009, 02:33 am
Miren:
Para aclarar algunas dudas:

(http://img62.imageshack.us/img62/2297/sqlite.jpg)


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 15 Octubre 2009, 02:38 am
Perfecto si SQLite maneja el asunto de esa manera. No es lo estandar que conste (Lo estandar es que trunque hasta el limite de almacenamiento definido) al menos la teoria de truncar hasta el limite aplica en la mayoria de base de datos relacionales existentes. Inconvenientes que ese funcionamiento de SQLite con varchar puede causar? bueno, hay que ver a la hora de migrar datos de SQLite donde se definan varchar(20) inserten 100 caracteres, y esta misma tabla pase a MySQL, MySQL bastante probable trunquee los caracteres hasta 20 ya que el tipo de datos CHAR asi funciona en la mayoria de DB relacionales populares del mercado, no estoy muy al tanto de SQLite no lo utilizo, solo hice una referencia de los tipos de datos comunes en todas las DB (nisiquiera mencione TEXT puesto que no aplica en todas las DB) y de la forma como los motores trabajan con ellos, ahora que SQLite haya personalizado el tipo de dato VARCHAR o haya hecho una copia de TEXT como VARCHAR ya es otra cosa, pero eso no aplica en otras DB de nivel profesional.

Citar

  Insertar Cita
Miren:
Para aclarar algunas dudas:

Por cierto cuales dudas aclaras???? no me hagas repetir en un copy + paste los tipos de datos otra vez  :-\  que son los mismos que mencione, a excepcion de unos cuantos mas que no quize mencionar porque no aplican en todas las base de datos y yo quize ser mas general.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: seba123neo en 15 Octubre 2009, 03:01 am
Perfecto si SQLite maneja el asunto de esa manera. No es lo estandar que conste (Lo estandar es que trunque hasta el limite de almacenamiento definido) al menos la teoria de truncar hasta el limite aplica en la mayoria de base de datos relacionales existentes. Inconvenientes que ese funcionamiento de SQLite con varchar puede causar? bueno, hay que ver a la hora de migrar datos de SQLite donde se definan varchar(20) inserten 100 caracteres, y esta misma tabla pase a MySQL, MySQL bastante probable trunquee los caracteres hasta 20 ya que el tipo de datos CHAR asi funciona en la mayoria de DB relacionales populares del mercado, no estoy muy al tanto de SQLite no lo utilizo, solo hice una referencia de los tipos de datos comunes en todas las DB (nisiquiera mencione TEXT puesto que no aplica en todas las DB) y de la forma como los motores trabajan con ellos, ahora que SQLite haya personalizado el tipo de dato VARCHAR o haya hecho una copia de TEXT como VARCHAR ya es otra cosa, pero eso no aplica en otras DB de nivel profesional.

yo tampoco estoy muy metido en SQL Lite yo estoy en SQL Server, MySQL...pero me parecio raro el tema del tamaño del campo.pero se ve que estaba equivocado, se ve que depende del administrador que tengas, el que estaba usando yo se ve que no es muy bueno y me dejaba definir un campo varchar(50) por ejemplo y despues meterle lo que quiera y despues al hacer el select salia todo...pero con este SQLite Administrator no...lo hace bien, te deja definir el tamaño del campo y te lo trunca bien como debe ser y no te deja agregar mas de lo que es.¿ahora yo me pregunto porque dice eso en la pagina de SQL Lite?

saludos.


Título: Re: Tipos de Datos de SQLite (ayuda!!)
Publicado por: ^Tifa^ en 15 Octubre 2009, 14:23 pm
Citar
¿ahora yo me pregunto porque dice eso en la pagina de SQL Lite?

La verdad yo ni idea  :-\  lo normal y lo correcto es que los tipos de datos char y varchar trunquen datos al insertar mas del tamanio maximo colocado... por ende si SQLite aun maneja la situacion sin evaluar esto sera un tipo de dato VARCHAR personalizado por ellos mismos o no sabria  :-\

Pero que no se fie de esto si desea portabilidad  :P