Estou criando um novo aplicativo Web usando o Rails e fiquei pensando: qual é a diferença entre string
e text
? E quando cada um deve ser usado?
ruby-on-rails
Mo.
fonte
fonte
:text
. Veja depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-texttrue
em um varchar (ergo,string
type field) no MySQL serializa o valor para1
(o que é completamente justo). No entanto, notext
tipo, armazenar o valor "true" acaba sendo serializado como um caractere singulart
. Migrei uma coluna sem perceber isso e todas as linhas futuras em que o valor é verdadeiro são agorat
. Alguém tem alguma idéia desse comportamento?Se você estiver usando o postgres, use texto sempre que puder, a menos que você tenha uma restrição de tamanho, pois não há penalidade de desempenho entre texto e varchar
Manual do PostsgreSQL
fonte
text
excessivos(n)
são convincentes, mas o argumento de uso detext
excesso de dadosvarchar
não é. Ele diz que eles são iguais, mas preferetext
porquevarchar
pode ser confundidovarchar(n)
e porquetext
há menos caracteres para digitar. Mas, emtext
vez de usarvarchar
, você perde o contexto em que os dados armazenados não devem ser longos. Por exemplo, armazenar um nome de usuário comtext
parece enganador para mim.String traduz para "Varchar" no seu banco de dados, enquanto texto é traduzido para "texto". Um varchar pode conter muito menos itens, um texto pode ter (quase) qualquer comprimento.
Para uma análise aprofundada com boas referências, verifique http://www.pythian.com/news/7129/text-vs-varchar/
Editar: Alguns mecanismos de banco de dados podem carregar
varchar
de uma só vez, mas armazenam texto (e blob) fora da tabela. ASELECT name, amount FROM products
poderia ser muito mais lento ao usartext
doname
que ao usarvarchar
. E como o Rails, por padrão, carrega os registros comSELECT * FROM...
suas colunas de texto. Isso provavelmente nunca será um problema real no seu ou no meu aplicativo (a otimização prematura é ...). Mas saber que o texto nem sempre é "gratuito" é bom saber.fonte
Seqüência de caracteres se o tamanho for fixo e pequeno e texto se for variável e grande. Isso é importante porque o texto é muito maior que as strings. Ele contém muito mais kilobytes.
Portanto, para campos pequenos, use sempre string (varchar). Campos como. first_name, login, email, assunto (de um artigo ou postagem) e exemplo de textos: conteúdo / corpo de uma postagem ou artigo. campos para parágrafos etc
Tamanho da sequência de 1 a 255 (padrão = 255)
Tamanho do texto 1 a 4294967296 (padrão = 65536) 2
fonte
Como explicado acima, não apenas o tipo de dados db, ele também afetará a exibição que será gerada se você estiver com andaimes. string irá gerar um campo de texto texto irá gerar uma área de texto
fonte
Use string para campos mais curtos, como nomes, endereço, telefone, empresa
Use Texto para conteúdo maior, comentários, conteúdo, parágrafos.
Minha regra geral, se é algo que tem mais de uma linha, eu normalmente uso texto, se tiverem de duas a seis palavras curtas, uso string.
A regra oficial é 255 para uma sequência. Portanto, se sua string tiver mais de 255 caracteres, vá para o texto.
fonte
Se você estiver usando o oracle ...
STRING
será criado comoVARCHAR(255)
coluna eTEXT
, como aCLOB
.https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
fonte
A resposta aceita é impressionante, explica corretamente a diferença entre string e texto (principalmente o tamanho limite no banco de dados, mas existem algumas outras dicas), mas eu queria destacar um pequeno problema que me levou a resolver essa questão não fez isso completamente por mim.
O tamanho máximo : limite => 1 a 4294967296 não funcionou exatamente como foi colocado, eu precisava ir -1 desse tamanho máximo. Estou armazenando blobs JSON grandes e eles podem ser enormes demais às vezes.
Aqui está minha migração com o valor maior no lugar com o valor que o MySQL não reclama.
Observe os 5 no final do limite em vez de 6
fonte
Se o atributo estiver correspondendo
f.text_field
no formulário, use string , se estiver correspondendo,f.text_area
use text .fonte