Os Tipos BLOB
e TEXT
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. Leia "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:
- Você pode ter indices em um campo
BLOB
eTEXT
no MariaDB Versão 3.23.2 e mais novas. Versões antigas do MariaDB não suportam isto. - Não há remoção de espaços extras para campos
BLOB
eTEXT
quando os valores são armazenados, como há em camposVARCHAR
. - Colunas
BLOB
eTEXT
não podem ter valores padrões.
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
ouORDER BY
em um campoBLOB
ouTEXT
, você deve converte-los em objetos de tamanho fixo. O modo padrão de se fazer isto é com a funçãoSUBSTRING
. 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 demax_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 valoresBLOB
ouTEXT
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
ouTEXT
é 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. Leia "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.