Um BLOB
é um objeto binario grande que
pode guardar um montante variado de dados. Os quatro tipos
BLOB
: TINYBLOB
,
BLOB
, MEDIUMBLOB
, e
LONGBLOB
diferem apenas no tamanho maximo
dos valores que eles podem guradar. See
Secção 6.2.6, “Exigências de Armazenamento dos Tipos de Coluna”.
Os quatro tipos TEXT
:
TINYTEXT
, TEXT
,
MEDIUMTEXT
, e LONGTEXT
correspondem aos quatro tipos BLOB
e têm o
mesmo tamanho máximo e necessidade de tamanho para
armazenamento. A única diferença entre os tipos
BLOB
e TEXT
é que
ordenação e comparação são realizadas no modo
caso-sensitivo para valores BLOB
e no modo
caso-insensitivo para valores TEXT
. Em
outras palavras, um TEXT
é um
BLOB
no modo caso-insensitivo. Nenhum caso
de conversão é feito durante um o armazenamento ou
recuperação.
Se você atribuir um valor a uma coluna
BLOB
ou TEXT
que exceda
o tamanho máximo do tipo da coluna, o valor é truncado para
servir ao campo.
Em muitos casos, podemos considerar um campo
TEXT
como um campo
VARCHAR
que pode ser tão grande quando
desejamos. Da mesma forma podemos considerar um campo
BLOB
como um campo VARCHAR
BINARY
. As diferenças são:
A partir da versão 4.1.0, LONG
e
LONG VARCHAR
mapeiam para o tipo de dados
MEDIUMTEXT
. Este é um recurso de
compatibilidade.
MyODBC
define valores
BLOB
como LONGVARBINARY
e valores TEXT
como
LONGVARCHAR
.
Como valores BLOB
e TEXT
podem ser extremamentes longos, você pode deparar com alguns
problemas quando utilizá-los:
Se você quiser utilizar GROUP BY
ou
ORDER BY
em um campo
BLOB
ou TEXT
, você
deve converte-los em objetos de tamanho fixo. O modo
padrão de se fazer isto é com a função
SUBSTRING
. Por exemplo:
mysql>SELECT comentario FROM nome_tabela,SUBSTRING(comentario,20) AS substr
->ORDER BY substr;
Se você não fizer isto, só os primeiros
max_sort_length
bytes de uma coluna
serão utilizados na ordenação. O valor padrão de
max_sort_length
é 1024; este calor
pode ser alterado utilizando-se a opção
-O
quando o servidor é inicializado.
Você pode agrupar uma expressão envolvendo valores
BLOB
ou TEXT
especificando a posição da coluna ou utilizando apelidos
(alias):
mysql>SELECT id,SUBSTRING(col_blob,1,100) FROM nome_tabela GROUP BY 2;
mysql>SELECT id,SUBSTRING(col_blob,1,100) AS b FROM nome_tabela GROUP BY b;
O tamanho máximo de uma objeto BLOB
ou
TEXT
é determinado pelo seu tipo, mas o
maior valor que você pode, atualmente, transmitir entre o
cliente e o servidor é determinado pela quantidade de
memória disponível e o tamanho dos buffers de
comunicação. Você pode mudar o tamanho do buffer de
mensagem (max_allowed_packet
), mas
você deve faze-lo no servidor e no cliente. See
Secção 5.5.2, “Parâmetros de Sintonia do Servidor”.
Note que cada valor BLOB
ou
TEXT
é representado internamente por um
objeto alocado searadamente. Está é uma diferença com todos
os outros tipos de colunas, para o qual o armazenamento é
alocado um por coluna quando a tabela é aberta.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.