¿Dudas tipo numéricos en MYSQL?

Iniciado por BlaineMonkey, 30 Marzo 2010, 17:10 PM

0 Miembros y 1 Visitante están viendo este tema.

BlaineMonkey

Tengo una duda:
¿Cual es el tipo numérico idóneo para valores que pueden ser 0 ó 1?

Creo que el Decimal de 1 de longitud. ¿Es así?

Para registros que pueden ir desde el 0 al 999 sería mejor utilizar el tipo DECIMAL de longitud 3 que un INTEGER. No?  Si no es así, ¿cual sería el más apropiado?

^Tifa^

Citar¿Cual es el tipo numérico idóneo para valores que pueden ser 0 ó 1?

Tipo de datos  Bit  (toma 0 o 1)

CitarCreo que el Decimal de 1 de longitud. ¿Es así?

Decimal accepta numeros con punto o flotantes, no valores enteros.... O sea los valores en Decimal van mas o menos asi (10.000, 234.000, etc) No enteros.

CitarPara registros que pueden ir desde el 0 al 999 sería mejor utilizar el tipo DECIMAL de longitud 3 que un INTEGER. No?  Si no es así, ¿cual sería el más apropiado?

Smallint ... va de 0 a 65535 (cuando son numeros positivos).  No te digo Tinyint porque el maximo de este es de 0 a 255 cuando son numeros positivos.

Skeletron

Pero para los booleanos, la base de datos ocupa lo mismo poner un BOLEAN que un TINYINT.. o me equivoco?

^Tifa^

#3
Cita de: Skeletron en 30 Marzo 2010, 18:02 PM
Pero para los booleanos, la base de datos ocupa lo mismo poner un BOLEAN que un TINYINT.. o me equivoco?

Si, en espacio si ocupan 1 byte en memoria ambos tipos de datos....

La diferencia en este caso es, que Tinyint puede guardar cualquier numero que este en el rango 0 a 255 positivos, y si el chico solo quiere 0 y 1 pues.. tendra que controlar que valores llegan a insertarse en este campo a traves de su lenguaje de programacion (No es un proceso complicado ni dificil lo sabes.. pero hay que hacerlo).

En cambio con el tipo de datos BIT solo ocupa 0 o 1  no otra cosa...

PD: Me corrigo a mi misma (Soy mediocre con los numeros disculpen).

No Skeletron, el tipo Bit en MySQL ocupa menos que Tinyint  ;)

Tinyint ocupa 1 bytes en memoria.
Bit ocupa 1 bit en memoria

1 bytes tiene un numero limitado de bits... pueden ser 4 bit, 5 bit, 6 bit..etc pero son varios no 1 solo.


Fuente:  http://es.wikipedia.org/wiki/Bit

Dios... debo estudiar mas electronica y matematica Binaria  :xD   :xD 

Skeletron

Tiffa, yo ya se que el bit es 1 posicion, y el bait son 8.. Pero, por ahí leí que MySQL ocupaba mas...

A ver, cual es el tipo de dato BOLEAN de MySQL?
Haré unas pruebas

^Tifa^

Ciertamente BIT solia ser tambien interpretado por el motor como un Tinyint segun la web de MySQL:

CitarEn MySQL 5.0.3, un tipo de datos BIT está disponible para almacenar valores de un bit. (Antes de 5.0.3, MySQL interpreta BIT como TINYINT(1).)

http://dev.mysql.com/doc/refman/5.0/es/numeric-types.html

Pero hace referencia a MySQL 5.0.3 (bastante antiguo) pero claramente dice que en versiones de MySQL 5.0.3 he inferiores BIT los interpretaba el motor como un TINYINT pero es a partir de esa vieja version de MySQL he inferiores, ya en las superiores aparentemente no es tratado de la misma manera.

Que conste que nunca me he visto en la necesidad de dar uso de este tipo de datos en un motor.

Skeletron

Yo lo utilizo para:
En una tabla de e-mails, cual ya ha sido enviado o no
En una tabla de usuarios, cual tiene una foto registrada a su poder o no
En una tabla de usuarios, si la persona es MUJER o HOMBRE (0=mujer, 1=hombre)

Por lo que veo, al leer "La Biblia de MySQL" muchos conceptos estan demaciados viejos ahí...
Tendre que leer algo que me ponga mas al tanto..

^Tifa^

Si esos libros estan un poco viejitos ya... pero sirven de base para entender algo  ;)

Le convendria usar BIT para los true y false pero... para sacar el valor tendra que usar un convertidor en su consulta (ya que el dato se guarda binario y leerlo a pura consulta SQL saldra simbolito raro) entonces el tendria que consultar asi:

SELECT BIN(campo) FROM TABLA WHERE ...

Para que al imprimir el valor salga en numero entero y no un caracter rarisimo ahi en Ascii.

Si usase Tinyint, tendria que controlar los valores que llegan al motor ya que tinyint soporta mas valores ademas de 0 y 1

Besis