Tag: smallint
Campos de tipo Numericos en MySQL
por ObjetivoPHP el Oct.05, 2009, bajo MySQL
MySQL soporta todos los tipos de datos SQL numéricos estándar. Incluye los tipos numéricos enteros (INTEGER, SMALLINT, DECIMAL, NUMERIC) y los con decimales (FLOAT, REAL, DOUBLE PRECISION).
La palabra clave INT es sinonimo de INTEGER y la palabra clave DEC de DECIMAL.
A partir de MySQL 5.0.3 esta disponible el campo tipo BIT el cual almacena valores de un bit, antes se interpretaba como un TINYINT(1), en esta version solo esta soportado para tablas de tipo MyISAM a partir de la version 5.0.5 se amplia a tablas tipo MEMORY, InnoDB y BDB.
Tipo |
Bytes |
Valor Mínimo |
Valor Máximo |
| (Con signo/Sin signo) | (Con signo/Sin signo) | ||
TINYINT |
1 | -128 |
127 |
| 0 | 255 |
||
SMALLINT |
2 | -32768 |
32767 |
0 |
65535 |
||
MEDIUMINT |
3 | -8388608 |
8388607 |
0 |
16777215 |
||
INT |
4 | -2147483648 |
2147483647 |
0 |
4294967295 |
||
BIGINT |
8 | -9223372036854775808 |
9223372036854775807 |
0 |
18446744073709551615 |
En MySQL también se puede especificar el ancho a mostrar de un tipo entero en paréntesis después de la palabra clave para el tipo (por ejemplo, INT(4)). Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.
El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, no el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.
Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se remplaza por ceros. Por ejemplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna.
Todos los tipos enteros pueden tener un atributo opcional (no estándar) UNSIGNED. Los valores sin signo pueden usarse cuando quiere permitir sólo números no negativos en una columna y necesita un rango numérico mayor para la columna.
Tipos de coma flotante y de coma fija pueden ser UNSIGNED. Como con los tipos enteros, este atributo evita que los valores negativos se almacenen en la columna. Sin embargo, a diferencia de los tipos enteros, el rango superior de los valores de la columna sigue siendo el mismo.
Si especifica ZEROFILL para una columna numérica, MySQL añade automáticamente el atributo UNSIGNED a la columna.
Para columnas de tipo coma flotante, MySQL usa cuatro bytes para valores de precisión simple y ocho bytes para valores de doble precisión.
El tipo FLOAT se usa para representar tipos numéricos aproximados. El estándar SQL permite una especificación opcional de la precisión (pero no del rango del exponente) en bits a continuación de la palabra clave FLOAT entre paréntesis. La implementación de MySQL soporta esta especificación opcional de precisión, pero el valor de precisión se usa sólo para determinar el tamaño de almacenamiento. Una precisión de 0 a 23 resulta en una columna de precisión simple de cuatro bytes de tamaño FLOAT . Una precisión de 24 a 53 resulta en una columna de doble precisión de ocho bytes de tamaño DOUBLE .
Cuando se especifica la palaba clave FLOAT para tipos de columnas sin especificar la precisión, MySQSL usa cuatro bytes para almacenar los valors. MySQL también soporta una sintaxis alternativa con dos números entre paréntesis a continación de la palabra clave FLOAT . El primer número representa el ancho a mostrar y el segundo número especifica el número de dígitos a almacenar a continuación del punto decimal ( como con DECIMAL y NUMERIC). Cuando se pide a MySQL que almacene un número para tales columnas con más dígitos decimales a continuación del punto decimal del especificado para la columna, el valor se redondea para elminar los dígitos extras cuando se almacena el valor.
En SQL estándar, los tipos REAL y DOUBLE PRECISION no aceptan especificaciones de precisión. MySQL soporta una sintaxis alternativa con dos números dados entre paréntesis a continuación del nombre del tipo. El primer número representa el ancho a mostrar y el segundo número especifica el número de dígitos a almacenar y mostrar a continuación del punto decimal. Como una extensión al estándar SQL, MySQL reconoce DOUBLE como sinónimo del tipo DOUBLE PRECISION . En contraste con el requerimiento estándar que la precisión para REAL sea menor que la usada para DOUBLE PRECISION, MySQL implementa ambas como valores de punto flotante de doble precisión con tamaño de ocho bytes (a no ser que el modo SQL del servidor incluya la opción REAL_AS_FLOAT ).
Para portabilidad máxima, el código que requiera almacenamiento de datos numéricos aproximados debe usar FLOAT o DOUBLE PRECISION sin especificar la precisión ni el número de dígitos decimales.
Los tipos DECIMAL y NUMERIC se implementan como el mismo tipo en MySQL. Se usan para guardar valores para los que es importante preservar una precisión exacta, por ejemplo con datos monetarios. Cuando se declara una columna de alguno de estos tipos, la precisión y la escala puede especificarse (y usualmente se hace), por ejemplo:
salary DECIMAL(5,2)
En este ejemplo, 5 es la precisión y 2 es la escala. La precisión representa el número de dígitos decimales significativos que se almacenan para los valores, y la escala representa el número de dígitos que pueden almacenarse a continuación del punto decimal.
Desde MySQL 5.0.3, los valores DECIMAL y NUMERIC se almacenan en formato binario. Antes de 5.0.3, MySQL almacena los valores DECIMAL y NUMERIC como cadenas de caracteres, en lugar de binario. .Un carácter se usa para cada dígito del valor, el punto decimal (si la escala es mayor que 0), y el signo ‘-‘ (para números negativos). Si la escala es 0, los valores DECIMAL y NUMERIC no contienen punto decimal o parte fraccional.
SQL estándar requiere que la columna salary sea capaz de almacenar cualquier valor con cinco dígitos y dos decimales. En este caso, por lo tanto, el rango de valores que puede almacenarse en la columna salary es desde -999.99 a 999.99. MySQL fuerza este límite desde MySQL 5.0.3. Antes de 5.0.3, MySQL 5.0 variaba este límite de forma que, en el límite positivo del rango, la columna podía almacenar números hasta 9999.99. (Para números positivos, MySQL 5.0.2 y anteriores usaba el byte reservado para el signo para extender el límite superior del rango.)
En SQL estándar, la sintaxis DECIMAL( es equivalente a M)DECIMAL(. Similarmente, la sintaxis M,0)DECIMAL es equivalente a DECIMAL(, donde la implementación se permite para decidir el valor de M,0)M. Ambas formas de los tipos DECIMAL y NUMERIC se soportan en MySQL 5.0. El valor por defecto de M es 10.
El máximo rango de los valores DECIMAL y NUMERIC es el mismo para DOUBLE, pero el rango real para un valor dado en una columna DECIMAL o NUMERIC puede restringirse con la precisión o escala para una columna dada. Cuando en tal columna se asigna un valor con más dígitos siguiendo el punto decimal de los permitidos por la escala específica, el valor se convierte a tal escala. (El comportamiento preciso depende del sistema operativo, pero generalmente el efecto es que se trunca al número de dígitos permitidos.)
Desde MySQL 5.0.3, el tipo de datos BIT puede usarse para guardar valores de un bit. Un tipo BIT( permite el almacenamiento de valores de M)M-bit . M tiene un rango de 1 a 64.
Para especificar valores bit, puede usar la notación b' . value'value es un valor binario escrito usando ceros y unos. Por ejemplo, b'111' y b'100000000' representan 7 y 128, respectivamente. Consulte Sección 9.1.5, “Valores de bits”.
Si asigna un valor a una columna BIT( con menos de M)M bits , el valor se alinea a la izquierda con ceros. Por ejemplo, asignar un valor b'101' a una columna BIT(6) es, en efecto, lo mismo que asignar b'000101'.
Cuando se intenta almacenar un valor en una columna numérica que está fuera del rango permitido por la columna, MySQL corta el valor en el final del rango permitido y guarda el valor resultante.
Por ejemplo, el ranto de una coluna INT es de -2147483648 a 2147483647. Si intenta insertar -9999999999 en una columna INT, MySQL reemplaza el valor con el mínimo valor del rango y almacena -2147483648 en su lugar. De forma similar, si trata de insertar 9999999999, MySQL reemplaza el valor con el valor máximo del rango y almacena 2147483647 en su lugar.
Si la columna INT es UNSIGNED, el tamaño del rango de la columna es el mismo, pero los límites cambian a 0 y 4294967295. Si intenta almacenar -9999999999 y 9999999999, los valores almacenados en la columna son 0 y 4294967296.
Cuando se asigna un valor fuera de rango especificado (o por defecto) a una columna de coma flotante o fija, MySQL almacena el valor representado por el valor correspondiente al límite de rango correspondiente.
Las conversiones debidas a valores fuera de rango se reportan como advertencias para los comandos ALTER TABLE, LOAD DATA INFILE, UPDATE, y INSERT de múltiples registros.