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
BLOBeTEXTno 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
BLOBeTEXTquando os valores são armazenados, como há em camposVARCHAR. - Colunas
BLOBeTEXTnã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 BYouORDER BYem um campoBLOBouTEXT, 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_lengthbytes 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-Oquando o servidor é inicializado. Você pode agrupar uma expressão envolvendo valoresBLOBouTEXTespecificando 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
BLOBouTEXTé 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.