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.