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.
Consulte Sección 11.5, “Requisitos de almacenamiento según el tipo de columna”.
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. Consulte Sección 5.3.2, “El modo SQL del servidor”.
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. Consulte Sección 7.4.3, “Índices de columna”.
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 . Consulte
Sección 5.3.3, “Variables de sistema del servidor”.
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 . Consulte
Sección 7.5.2, “Afinar parámetros del servidor”,
Sección 8.3, “La herramienta intérprete de comandos mysql”, y Sección 8.7, “El programa de copia de seguridad de base de datos
mysqldump”.
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.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
