ObjetivoPHP

Tag: campos

Campos tipo cadena de caracteres en MySQL

por ObjetivoPHP el Oct.25, 2009, bajo MySQL

Los tipos de cadena de caracteres utilizados por MySQL son los CHAR, VARCHAR, BINARY, VARBINARY, los campos BLOB y TEXT y los de lista ENUM y SET.

CHAR Y VARCHAR

Son campos para almacenar caracteres y difieren en:

  • cómo se almacenan
  • cómo se recuperan
  • longitud máxima (Desde MySQL 5.0.3)
  • cómo se tratan los espacios finales.

Los tipos CHAR y VARCHAR se declaran con una longitud que indica el máximo número de caracteres que quiere almacenar. Por ejemplo, CHAR(30) puede almacenar hasta 30 caracteres.

La longitud de una columna CHAR se fija a la longitud que se declara al crear la tabla. La longitud puede ser cualquier valor de 0 a 255. Cuando los valores CHAR se almacenan, se añaden espacios a la derecha hasta las longitud específica. Cuando los valores CHAR se recuperan, estos espacios se borran.

Los valores en columnas VARCHAR son cadenas de caracteres de longitud variable. En MySQL 5.0, la longitud puede especficarse de 0 a 255 antes de MySQL 5.0.3, y de 0 a 65,535 en 5.0.3 y versiones posteriores. (La máxima longitud efectiva de un VARCHAR en MySQL 5.0 se determina por el tamaño de registro máximo y el conjunto de caracteres usados. La longitud máxima total es de 65,532 bytes.)

En contraste con CHAR, VARCHAR almacena los valores usando sólo los caracteres necesarios, más un byte adicional para la longitud (dos bytes para columnas que se declaran con una longitud superior a 255).

Los valores VARCHAR no se cortan al almacenarse. El tratamiento de espacios al final depende de la versión. Desde MySQL 5.0.3, los espacios finales se almacenan con el valor y se retornan, según el estándar SQL. Antes de MySQL 5.0.3, los espacios finales se eliminan de los valores cuando se almacenan en una columna VARCHAR, esto significa que los espacios también están ausentes de los valores retornados.

Durante el almacenamiento y la recuperación de valores no hace ninguna conversión de mayúsculas y minúsculas.

Si asigna un valor a una columna CHAR o VARCHAR que exceda la longitud máxima de la columna, el valor se trunca. Si los caracteres truncados no son espacios, se genera una advertencia. Puede hacer que aparezca un error en lugar de una advertencia usando modo SQL estricto.

Antes de MySQL 5.0.3, si necesita un tipo de datos para el que no se borren los espacios finales, considere usar un tipo BLOB o TEXT . También, si quiere almacenar valores binarios como resultados de encriptación o compresión que puedan contener valores byte arbitrarios, use una columna BLOB en lugar de CHAR o VARCHAR, para evitar problemas potenciales con eliminación de espacios finales que puedan cambiar los valores de los datos.

La siguiente tabla ilustra las diferencias entre los dos tipos de columnas mostrando el resultado de almacenar varios valores de cadenas de caracteres en columnas CHAR(4) y VARCHAR(4) :

Valor CHAR(4) Almacenamiento necesario VARCHAR(4) Almacenamiento necesario
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

Los valores retornados de las columnas CHAR(4) y VARCHAR(4) son los mismos en cada caso, ya que los espacios finales se eliminan en la recuperación de valores CHAR.

En MySQL 5.0, los valores en columnas CHAR y VARCHAR se almacenan y comparan según la colación del conjunto de caracteres asignado a la columna.

CHAR BYTE es un alias para CHAR BINARY. Existe por cuestión de compatibilidad.

El atributo ASCII asigna el conjunto de caracteres latin1 a una columna CHAR . El atributo UNICODE asigna el conjunto de caracteres ucs2 .

MySQL puede cambiar silenciosamente el tipo de una columna CHAR o VARCHAR en tiempo de creación.

BINARY Y VARBINARY

Los tipos BINARY y VARBINARY son similares a CHAR y VARCHAR, excepto que contienen cadenas de caracteres binarias en lugar de cadenas de caracteres no binarias. Esto es, contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres asignado, y la comparación y ordenación se basa en los valores numéricos de los valores de los bytes.

La longitud máxima disponible es la máxima para BINARY t VARBINARY como para CHAR y VARCHAR, excepto que la longitud para BINARY y VARBINARY es una longitud en bytes en lugar de en caracteres.

El tratamiento de los espacios finales es el mismo para BINARY y VARBINARY como lo es para CHAR y VARCHAR. Cuando se almacenan los valores BINARY, se rellenan con espacios a la derecha hasta la longitud especificada. Cuando los valores BINARY se recuperan, los espacios finales se eliminan. Para VARBINARY, los espacios finales se eliminan cuando los valores se almacenan. Desde MySQL 5.0.3, los espacios finales se mantienen. Debe considerar estas características si planea usar estos tipos de datos para almacenar datos binarios que deban acabar con espacios.

En MySQL 5.0, BINARY y VARBINARY son tipos de datos distintos. Para CHAR(M) BINARY y VARCHAR(M) BINARY, el atributo BINARY hace que se use la colación binaria para la columna, pero la columna no contiene cadenas de caracteres no binarios en lugar de cadenas binarias de bytes. Por ejemplo CHAR(5) BINARY se trata como CHAR(5) CHARACTER SET latin1 COLLATE latin1_bin, asumiendo que el conjunto de caracteres por defecto es latin1.

BLOB Y TEXT

Un BLOB es un objeto binario que puede tratar una cantidad de datos variables. Los cuatro tipos BLOB son TINYBLOB, BLOB, MEDIUMBLOB, y LONGBLOB. Difieren sólo en la longitud máxima de los valores que pueden tratar.

Los cuatro tipos TEXT son TINYTEXT, TEXT, MEDIUMTEXT, y LONGTEXT. Se corresponden a los cuatro tipos BLOB y tienen las mismas longitudes y requerimientos de almacenamiento.

Las columnas BLOB se tratan como cadenas de caracteres binarias (de bytes). Las columnas TEXT se tratan como cadenas de caracteres no binarias (de carácateres). Las columnas BLOB no tienen conjunto de caracteres, y la ordenación y la comparación se basan en los valores numéricos de los bytes. Las columnas TEXT tienen un conjunto de caracteres y se ordenan y comparan en base de la colación del conjunto de caracteres asignada a la columna desde MySQL 4.1.

No hay conversión de mayúsculas/minúsculas para columnas TEXT o BLOB durante el almacenamiento o la recuperación.

Si asiguna un valor a una columna BLOB o TEXT que exceda la longitud máxima del tipo de la columna, el valor se trunca. Si los caracteres truncados no son espacios, aparece una advertencia. Puede hacer que aparezca un error en lugar de una advertencia usando el modo SQL estricto.

En la mayoría de aspectos, puede tratar una columna BLOB como VARBINARY que puede ser tan grande como desee. Similarmente, puede tratar columnas TEXT como VARCHAR. BLOB y TEXT difieren de VARBINARY y VARCHAR en los siguientes aspectos::

  • No se eliminan espacios al final para columnas BLOB y TEXT cuando los valores se almacenan o recuperan. Antes de MySQL 5.0.3, esto difiere de VARBINARY y VARCHAR, para los que se eliminaban los epacios al final cuando se almacenaban.Tenga en cuenta que TEXT realiza comparación espacial extendida para coincidir con el objeto comparado, exactamente como CHAR y VARCHAR.
  • Para índices en columnas BLOB y TEXT, debe especificar una longitud de prefijo para el índice. Para CHAR y VARCHAR, la longitud de prefijo es opciona.
  • BLOB y TEXT no pueden tener valores DEFAULT .

En MySQL 5.0, LONG y LONG VARCHAR se mapean con el tipo de datos MEDIUMTEXT. Esto existe por compatibilidad. Si usa el atributo BINARY con el tipo de columna TEXT, se asigna la colación binaria del conjunto de caracteres a la columna.

MySQL Connector/ODBC define los valores BLOB como LONGVARBINARY y valores TEXT como LONGVARCHAR.

Como los valores BLOB y TEXT pueden ser extremadamente grandes, puede encontrar algunas restricciones al usarlos:

  • Sólo los primeros max_sort_length bytes de la columna se usan al ordenar. El valor por defecto de max_sort_length es 1024; este valor puede cambiarse usando la opción --max_sort_length al arrancar el servidor mysqld .Puede hacer que haya más bytes significativos al ordenar o agrupar incrementando el valor de max_sort_length en tiempo de ejecución. Cualquier cliente puede cambiar el valor de su variable de sesión max_sort_length :
    mysql> SET max_sort_length = 2000;
    mysql> SELECT id, comment FROM tbl_name
        -> ORDER BY comment;

    Otra forma de usar GROUP BY o ORDER BY en una columna BLOB o TEXT conteniendo valores grandes cuando quiere que más de max_sort_length bytes sean significativos es convertir el valor de la columna en un objeto de longitud fija. La forma estándar de hacerlo es con la función SUBSTRING . Por ejemplo, el siguiente comando causa que 2000 bytes de la columna comment se tengan en cuenta para ordenación:

    mysql> SELECT id, SUBSTRING(comment,1,2000) FROM tbl_name
        -> ORDER BY SUBSTRING(comment,1,2000);
  • El tamaño máximo de un objeto BLOB o TEXT se determina por su tipo, pero el valor máximo que puede transmitir entre el cliente y el servidor viene determinado por la cantidad de memoria disponible y el tamaño de los buffers de comunicación. Puede cambiar el tamaño de los buffers de comunicación cambiando el valor de la variable max_allowed_packet, pero debe hacerlo para el servidor y los clientes . Por ejemplo, mysql y mysqldump le permite cambiar el valor de la variable del cliente max_allowed_packet .

Cada valor BLOB o TEXT se representa internamente como un objeto a parte. Esto se hace en contraste con todos los otros tipos de columnas, para los que el almacenamiento se hace una vez por columna cuando se abre la tabla.

ENUM

Un ENUM es un objeto de cadenas de caracteres con un valor elegido de una lista de valores permitidos que se enumeran explícitamente en la especificación de columna en tiempo de creación de la tabla.

El valor puede ser la cadena vacía ('') o NULL bajo ciertas circunstancias:

  • Si inserta un valor inválido en un ENUM (esto es, una cadena de caracteres no presente en la lista de valores permitidos), la cadena vacía se inserta en lugar de un valor especial de error. Esta cadena puede distinguirse de una cadena vacía “normal” por el hecho que esta cadena tiene un valor numérico 0. Más información posteriormente.
  • Si se declara una columna ENUM para permitir NULL, el valor NULL es un valor legal para la columna, y el valor por defecto es NULL. Si una columna ENUM se declara NOT NULL, su valor por defecto es el primer elemento de la lista de valores permitidos.

Cada valor de la enumeración tiene un índice:

  • Los valores de la lista de elementos permitidos en la especificación de la columna se numeran empezando por 1.
  • El valor de índice de la cadena errónea es 0. Esto significa que puede usar el siguiente comando SELECT para encontrar registros con el valor inválido ENUM asignado:
    mysql> SELECT * FROM tbl_name WHERE enum_col=0;
  • El índice del valor NULL es NULL.

Por ejemplo, una columna especificada como ENUM('one', 'two', 'three') puede tener cualquiera de los valores mostrados aquí. El índice de cada valor se muestra:

Valor Índice
NULL NULL
'' 0
'one' 1
'two' 2
'three' 3

Una enumeración puede tener un máximo de 65,535 elementos.

Los espacios finales se borran automáticamente para valores ENUM miembros cuando se crea la tabla.

Cuando se reciben, los valores almacenados en una columna ENUM se muestran usando el formato de mayúsculas/minúsculas usado en la definición de la columna. En MySQL 4.1.1, las columnas ENUM pueden recibir un conjunto de caracteres y colación. Para colaciones binarias o sensibles a mayúsculas/minúsculas, el formato se tiene en cuenta al asignar valores a la columna.

Si recibe un valor ENUM en contexto numérico, se retorna el índice del valor. Por ejemplo, puede recibir valores numéricos de una columna ENUM así:

mysql> SELECT enum_col+0 FROM tbl_name;

Si almacena un número en una columna ENUM, el número se trata como índice, y el valor almacenado es el miembro de la enumeración con ese índice. (Sin embargo, esto no funciona con LOAD DATA, que trata toda la entrada como cadenas de caracteres.) No es recomendable definir una columna ENUM con valores de enumeración que parezcan números, ya que esto puede causar confusión. Por ejemplo, la siguiente columna tiene miembros de enumeración con valores de '0', '1', y '2', pero valores de índice 1, 2, y 3:

numbers ENUM('0','1','2')

Los valores ENUM se ordenan según el order en que se enumeran los mienbros en la especificación de la columna. (En otras palabras, los valores ENUM se ordenan según sus números de índice.) Por ejemplo, 'a' se ordena antes que 'b' para ENUM('a', 'b'), pero 'b' se ordena antes de 'a' para ENUM('b', 'a'). La cadena vacía se ordena antes de las cadenas no vacías, y los valores NULL se ordenan antes de todos los otros valores de la enumeración. Para evitar resultados inesperados, especifique la lista ENUM en orden alfabético. También puede usar GROUP BY CAST(col AS VARCHAR) o GROUP BY CONCAT(col) para asegurarse que la columna se ordena léxicamente en lugar de por número de índice.

Si quiere determinar todos los valores posibles para una columna ENUM, use SHOW COLUMNS FROM tbl_name LIKE enum_col y parsee la definición de ENUM en la segunda columna de la salida.

SET

Un SET es un objeto de cadenas de caracteres que tiene cero o más valores, cada uno de ellos debe elegirse de una lista de valores posibles especificada cuando se crea la tabla. Los valores de columnas SET que consisten de múltiples miembros del conjunto se especifican con los miembros separados por comas (’,‘). Una consecuencia de esto es que los miembros de SET no pueden contener comas ellos mismos.

Por ejemplo, una columna especificada como SET('one', 'two') NOT NULL puede tener cualquiera de estos valores:

''
'one'
'two'
'one,two'

Un SET puede tener un máximo de 64 miembros distintos.

Los espacios finales se borran automáticamente de los miembros de un SET cuando se crea la tabla.

Cuando se recuperan, los valors almacenados en una columna SET se muestran usando la sensibilidad de mayúsculas/minúsculas usando en la definición de la columna. En MySQL 5.0, las columnas SET pueden tener un conjunto de caracteres y colación. Para colaciones binarias o sensibles a mayúsculas/minúsculas, esta sensibilidad se tiene en cuenta al asignar valores a la columna.

MySQL almacena valores SET numéricamente, con el bit de menos peso del valor almacenado correspondiente al primer miembro del conjunto. Si recibe un valor SET en un contexto numérico, el valor recibido tiene los bits asignados correspondientes a los miembros que coinciden con el valor de la columna. Por ejemplo, puede recuperar los valores numéricos de una columna SET así:

mysql> SELECT set_col+0 FROM tbl_name;

Si se almacena un número en una columna SET, los bits que se asignan en la representación binaria del número determinan los miembros del conjunto en el valor de la columna. Para una columna especificada como SET('a','b','c','d'), los miembros tienen los siguientes valores decimales y binarios:

SET Miembro Valor decimal Valor binario
'a' 1 0001
'b' 2 0010
'c' 4 0100
'd' 8 1000

Si asigna un valor de 9 a esta columna, esto es 1001 en binario, de forma que el primer y cuarto miembro delSET 'a' y 'd' se seleccionan y el valor resultante es 'a,d'.

Para un valor que contenga más de un elemento SET, no importa el orden en que se listen los elementos cuando inserte el valor. Tampoco no importa cuántas veces se lista un elemento dado para el valor. Cuando el valor se recupera posteriormente, cada elemento en el valor aparece una vez, con los elementos listados según el orden en que se especificaron al crear la tabla. Si una columna se especifica como SET('a','b','c','d'), 'a,d', 'd,a', y 'd,a,a,d,d' aparecen como 'a,d' al recuperarse.

Si asigna un valor no soportado a una columna SET, el valor se ignora.

Los valores SET se ordenan numéricamente. Los valores NULL se ordenan antes de los no NULL.

Normalmente, busca valores SET usando la función FIND_IN_SET() o el operador LIKE :

mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

El primer comando encuentra registros cuando set_col contiene el miembro value del conjunto. El segundo es similar, pero no igual: encuentra registros cuando set_col contengan el valor value en cualquier sitio, incluso cuando es una subcadena de otro miembro del conjunto.

Los siguientes comandos también son legales:

mysql> SELECT * FROM tbl_name WHERE set_col & 1;
mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';

El primero de estos comandos busca valores que contengan el primer miembro del conjunto. El segundo busca una coincidencia exacta. Tenga cuidado con las comparaciones del segundo tipo. Comparar valores del conjunto 'val1,val2' retorna distintos resultados que comparar valores de 'val2,val1'. Debe especificar los valores en el mismo orden en que se listan en la definición de la columna.

Si desea determinar todos los valores posibles para una columna SET, use SHOW COLUMNS FROM tbl_name LIKE set_col y parsee la definición de SET en la segunda columna de la salida.

Resumen para MySQL >= 5.0.3

Campo Tipo Binario Longitud unidad
CHAR No 255 Caracteres
VARCHAR No 65.535 Caracteres
BINARY Si 255 Bytes
VARBINARY Si 65.535 Bytes
TINYBLOB Si 255 Bytes
BLOB Si 65.535 Bytes
MEDIUMBLOB Si 16.777.215 Bytes
LONGBLOB Si 4.294.967.295 Bytes
TINYTEXT No 255 Caracteres
TEXT No 65.535 Caracteres
MEDIUMTEXT No 16.777.215 Caracteres
LONGTEXT No 4.294.967.295 Caracteres
ENUM No 65.535 Elementos
SET No 64 Elementos

Otras Consideraciones:

CampoTipo Tomado como
LONG MEDIUMTEXT
LONG VARCHAR MEDIUMTEXT
BINARY TEXT

Extraído de MySQL

Publicar Comentario :, , , , , , , mas...

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(M) es equivalente a DECIMAL(M,0). Similarmente, la sintaxis DECIMAL es equivalente a DECIMAL(M,0), donde la implementación se permite para decidir el valor de 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(M) permite el almacenamiento de valores de 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(M) con menos de 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.

Extraido de MySQL

Publicar Comentario :, , , , , , , mas...

Exportar De Excel a MySQL con PHP (Deame3p)

por ObjetivoPHP el Ago.12, 2009, bajo Rutinas PHP

Deame3p es una rutina que exporta datos contenidos en un archivo Excel hasta su versión 2003 a la base de datos MySql, utilizando el lenguaje PHP para realizar dicha tarea.

Descargue Deame3p desde este enlace
Las diferencias con otras soluciones de exportación son básicamente las siguientes:

  • nos permite la vinculación o asociación de los campos de la base de datos MySQL con los nombres de las columnas del archivo Excel, no siendo necesario que sus nombres coincidan.
  • Intenta la búsqueda de claves foráneas en la base de datos, para así proporcionarnos opciones de exportación, realizado para tablas tipo MISAM, por lo cual la clave foránea debe tener el mismo nombre que en la tabla donde es clave principal o única.
  • Con los campos AUTOINCREMENT nos da la posibilidad de mantener los datos de la planilla Excel o que la base siga numerando sola.(Se aconseja esta ultima opción para no provocar errores por duplicación).
  • Soporta dos modos INSERCION pura de datos o si una clave se Duplica se puede ACTUALIZAR esa línea.
  • Contiene funciones basicas de formateo de campos entre ellos se encuentran varchar, Date, DateTime,TimeStamp, Time, Year(4), tinyint, smallint, mediumint, int, bigint, bool, boolean, bit, float,double, set y enum. Además de incluir un método por defecto para los campos no implementados.
  • En el caso que administremos el servidor web permite la configuración de variables sensibles a la rutina como el consumo de memoria y el límite de tiempo máximo que puede ejecutarse.
  • Nos permite codificar la entrada a UTF8 o dejarla como se encuentra en la planilla MySQL.

Deame3p debe ser usado para tablas ya existentes, no crea tablas si no que inserta registros en ellas.

Requerimientos
PHP >= 5.2.0
MySQL >= 5
Navegador Compatible con JavaScript

Instalación
Lo único que tienes que hacer es descomprimir el archivo rar en tu servidor web y darle al directorio planillas los permisos de lectura y escritura.

Uso
Ingresas a la rutina a través de tu navegador Web (Recomendamos FireFox) elijes la opción EXPORTAR y vas siguiendo los pasos de los formularios.

Cualquier Duda o sugerencia por favor déjanos un comentario…
Gracias

Publicar Comentario :, , , , , , mas...

Busca algo

Use el formulario debajo para buscar en el sitio:

Todavía no a encontrado lo que usted busca? Deje un comentario, o póngase en contacto con nosotros así podremos ayudarlo.

Visite a nuestros amigos!

Recomendamos las siguientes paginas amigas...

Archivo

Todas las entradas, cronológicamente...