2010-07-28 8 views

risposta

453

La differenza si basa sul modo in cui il simbolo viene convertito nel rispettivo tipo di colonna nel linguaggio di query.

con MySQL: stringa viene mappato VARCHAR (255) - http://guides.rubyonrails.org/migrations.html

:string |     VARCHAR    | :limit => 1 to 255 (default = 255) 
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536) 

Riferimento:

http://www.packtpub.com/article/Working-with-Rails-ActiveRecord-Migrations-Models-Scaffolding-and-Database-Completion

Quando dovrebbero essere usati ciascuno?

Come regola generale di pollice, utilizzare :string per l'input breve testo (nome utente, email, password, titoli, ecc) e utilizzare :text per l'ingresso più atteso, come descrizioni, contenuti commento, ecc

+9

penso che una migliore regola empirica è quella di utilizzare sempre ': Text'. Vedere http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ –

+61

Per MySQL - non tanto, si può avere indici su VARCHAR, non è possibile su un testo . –

+9

L'implementazione di PostgreSQL preferisce il testo. L'unica differenza per string/testo pg è il vincolo sulla lunghezza per la stringa. Nessuna differenza di prestazioni. – wurde

17

La stringa si traduce in "Varchar" nel database, mentre il testo si traduce in "testo". Un varchar può contenere molto meno elementi, un testo può essere di (quasi) qualsiasi lunghezza.

Per un'analisi approfondita con buone referenze controllare http://www.pythian.com/news/7129/text-vs-varchar/

Edit: Alcuni motori di database possono caricare varchar in una volta sola, ma negozio di testo (e blob) al di fuori del tavolo. Un SELECT name, amount FROM products potrebbe essere molto più lento quando si utilizza text per name rispetto a quando si utilizza varchar. E poiché Rails, per impostazione predefinita carica i record con SELECT * FROM..., le colonne di testo verranno caricate. Questo probabilmente non sarà mai un vero problema nella tua o nella mia app, però (l'ottimizzazione prematura è ...). Ma sapere che il testo non è sempre "libero" è bene sapere.

138

Se si sta utilizzando Postgres utilizzare il testo ovunque è possibile, a meno che non si dispone di un vincolo di dimensione poiché non v'è alcuna penalizzazione delle prestazioni per il testo vs varchar

non v'è alcuna differenza di prestazioni tra questi tre tipi, a parte una maggiore spazio di archiviazione quando si utilizza il tipo con riempimento vuoto e alcuni cicli aggiuntivi della CPU per verificare la lunghezza n memorizzazione in una colonna con vincoli di lunghezza. Mentre character (n) ha vantaggi prestazionali in alcuni altri sistemi di database, non c'è alcun vantaggio in PostgreSQL; infatti, il carattere (n) è solitamente il più lento dei tre a causa dei suoi costi di archiviazione aggiuntivi. Nella maggior parte delle situazioni di testo o il carattere variabile dovrebbe essere usato al posto

PostsgreSQL manual

+4

Ma nell'interesse di essere indipendente dal database, questo è l'approccio migliore? Cosa succede se si desidera modificare il database? Concedo, nel mondo reale, che ciò non accade spesso, ma comunque ... se non c'è "nessuna differenza di aspetto", perché non attenersi all'utilizzo previsto della stringa per brevi cose e testo per cose più lunghe? E dato le tue stringhe di indicizzazione dei commenti, sembra ancora l'approccio migliore. –

+6

Esiste un numero qualsiasi di ragioni per cui potrebbe essere necessario nel mondo reale, dove è meglio gettare l'idea che esiste un'unica soluzione per qualsiasi problema. –

+13

Potrebbe essere così, ma l'agnosticismo del database è un falso profeta. –

10

Come spiegato in precedenza, non solo il tipo di dati db influirà anche la vista che verrà generato se si è impalcature. stringa genererà un campo text_field genererà un'area di testo

10

Stringa se la dimensione è fissa e piccola e il testo se è variabile e grande. Questo è un po 'importante perché il testo è molto più grande delle stringhe. Contiene molti più kilobyte.

Così per piccoli campi utilizzare sempre stringa (varchar). Campi come first_name, login, email, oggetto (di un articolo o post) ed esempi di testi: contenuto/corpo di un post o di un articolo. campi per paragrafi, ecc

formato stringa da 1 a 255 (default = 255)

Dimensioni testo 1-4294967296 (default = 65536) 2

1

Usa stringa per il campo più breve, come i nomi, indirizzo, telefono, società

Usa testo per i contenuti più grande, i commenti, i contenuti, i paragrafi.

La mia regola generale, se si tratta di qualcosa che è più di una riga, io di solito vado per il testo, se si tratta di una breve 2-6 parole, io vado per la stringa.

La regola ufficiale è 255 per una stringa. Quindi, se la tua stringa è più di 255 caratteri, vai per il testo.

Problemi correlati