Tipos de Datos de SQLite (ayuda!!)

Iniciado por Skeletron, 12 Octubre 2009, 23:03 PM

0 Miembros y 2 Visitantes están viendo este tema.

Skeletron

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!

^Tifa^

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.

Skeletron

Entonces tengo cualquier cosa guardada como FECHA...
Como me recomiendan guardar las fechas entonces??'
Como u campo TEXT y listo???

^Tifa^

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.

seba123neo

#4
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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

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 :)

seba123neo

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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

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í?

^Tifa^

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


CitarAl 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.


CitarNada 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.

Citarhe 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.

Citarguardala 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???


^Tifa^

#9
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.