É varchar
apenas um remanescente de antes text
veio ao redor, ou existem casos de uso onde você iria querer usar um varchar
? (Ou, char
nesse caso ..)
(Eu uso Postgres e MySQL (MyISAM) diariamente, então é nisso que eu mais me interesso, mas as respostas para outros bancos de dados são obviamente bem-vindas. ^ _-)
database
performance
mysql
efficiency
postgres
Izkata
fonte
fonte
text
está obsoleto. Há também considerações de uso relacionadas a onde os dados são armazenados e como, portanto, são acessados.Respostas:
Em geral
text
colunas não são padrão e são específicas da implementação. Em muitos casos, dependendo do banco de dados, eles podem ter uma combinação de uma ou mais das seguintes restrições: não indexável , não pesquisável e não classificável .No Postgres
Todos esses tipos são salvos internamente usando a mesma estrutura de dados C. .
No MySQL
A
text
coluna é uma versão especializadaBLOB
e tem restrições na indexação.Apenas esses dois exemplos podem ser extrapolados para outros sistemas SQL RDBMS e devem ser motivos suficientes para entender quando escolher um tipo em relação ao outro.
CHAR
quando souber que possui um número fixo de caracteres para cada entrada.VARCHAR
quando você tiver um número variável de caracteres para cada entrada.VARCHAR
fornecido,CLOB
comUTF-8
codificação ou tipo padrão equivalente.TEXT
pois não é padrão.fonte
non standard and implementation specific
enot indexable, not searchable and not sortable
, o que eu não percebi. Eu estava com a impressão de quetext
era padronizada.text
padrão ASCII ou UNICODEtext
:-) ou uma das outras meia dúzia detext
padrões de codificação?text
como um tipo de caractere. Eu não vi nada, alguns fornecedores chamamlong char
e assim por diante, é basicamente um BLOB com uma codificação anexada a ele.TEXT
". Se você estiver migrando para um banco de dados diferente, isso dificilmente prejudicará o negócio, especialmente porque você precisará considerar que o postgres é ilimitadoVARCHAR
(devido ao TOAST, não há limite de linhas, como no MySQL, por exemplo) pode não se traduzir em ilimitadoVARCHAR
no outros bancos de dados de qualquer maneira.text
,varchar
echar
todos são usados por diferentes motivos. É claro que existem diferenças de implementação (quanto tamanho elas ocupam ... etc), mas também existem considerações de uso e intenção . O tipo que você usa também informa sobre o tipo de dados que serão armazenados nele (ou todos nós usaríamostext
para tudo ). Se algo tem um comprimento fixo, usamoschar
. Se ele tiver comprimento variável com um limite superior bem definido, usevarchar
. Se é um pedaço grande de texto que você tem pouco controle,text
provavelmente seria sua melhor aposta.fonte
char
,varchar
, etext
são todos concebidos para armazenar o mesmo tipo de dados. Portanto, as duas respostas aqui são sobre verificação de limites. Se houver diferenças de eficiência, quais são elas? Por que eu iria usarvarchar
maistext
?Os bancos de dados estão intensamente preocupados com o desempenho - velocidade e minimização do armazenamento. Na maioria das outras partes do mundo dos computadores, você não se incomodará com quantos caracteres há na sua cadeia de caracteres; poderia ser um, poderia ser todo o conteúdo de uma enciclopédia; é tudo apenas uma corda. De fato, muitos idiomas nem mesmo o incomodam, seja uma string ou um número.
Porém, à medida que os computadores ficam mais rápidos e ganham mais memória, as pessoas colocam mais dados em seus bancos de dados e fazem consultas mais sofisticadas. Para um banco de dados, a CPU e a memória são hoje tão limitantes quanto nos dias de memória principal de 64Kb e discos rígidos de 10Mb (em computadores mainframe ).
Um número fixo de bytes é muito mais fácil de lidar do que um número de tamanho variável. 10 bytes é muito mais fácil de lidar do que 1.000.000. Portanto, seu banco de dados deseja que você dê uma pista para fornecer um gigabyte de resultados de terrabytes de dados em microssegundos. Se você não estiver usando seu banco de dados com tanta força, não precisará da velocidade que ele oferece e ficará aborrecido com as perguntas desnecessárias. Mas se você precisar do desempenho, ficará feliz em lhe dar algumas dicas.
Conforme observado nas outras respostas, use
char
se ele sempre usar um certo número de caracteres,varchar
se o comprimento puder variar, mas não for muito grande (meu palpite é que a maioria dos DBs o trata como umchar
outext
dependendo do tamanho) etext
se pode ter qualquer comprimento. Se suas tentativas SQL para usar umatext
coluna, pode ser melhor para resumi-lo de alguma forma, e colocá-lo em umchar
ou pequenavarchar
coluna também, em seguida, fazerwhere
's eorder by
é sobre isso. Claro, isso é apenas se o desempenho é importante para você.fonte