Sto creando una nuova app Web utilizzando Rails e mi chiedevo, qual è la differenza tra string
e text
? E quando dovrebbero essere usati ciascuno?Differenza tra stringa e testo nelle guide?
risposta
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:
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
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.
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
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. –
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. –
Potrebbe essere così, ma l'agnosticismo del database è un falso profeta. –
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
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
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.
- 1. Differenza tra file helper e file lib nelle guide
- 2. Differenza tra testo() e stringa()
- 3. Differenza tra @string e @ + stringa?
- 4. Differenza tra stringa e StaticString
- 5. Differenza tra stringa vuota e stringa vuota ("")
- 6. Differenza tra stringa dichiarata e stringa allocata
- 7. Come memorizzare enum come stringa nel database nelle guide
- 8. Differenza tra $ 1 e $ e nelle espressioni regolari
- 9. Differenza tra setTextContent() e appendChild (Testo)
- 10. Differenza tra e
- 11. Sunspot Rails differenza tra: testo un: stringa campi di tipo
- 12. differenza tra una ricerca nelle vicinanze e una ricerca di testo nell'API di Google Places
- 13. Differenza tra var e questo nelle funzioni Javascript?
- 14. Differenza tra valori associati e grezzi nelle enumerazioni rapide
- 15. qual è la differenza tra [] stringa e ... stringa in golang?
- 16. Differenza tra getString() e getResources.getString()
- 17. Informazioni sugli aggiornamenti Simple ActiveRecord nelle guide
- 18. Effettuare un'autenticazione di base Http nelle guide
- 19. ! 0 è false nelle guide. Perché?
- 20. Come utilizzare più cache nelle guide?
- 21. Come salvare il referer http nelle guide
- 22. Come si usa dipendente:: distruggere nelle guide?
- 23. Utilizzo registro della route predefinita nelle guide
- 24. Trovare l'ID di sessione nelle guide 3
- 25. Come impostare "l'icona di collegamento" nelle guide?
- 26. assegna/sostituisce l'hash dei parametri nelle guide
- 27. Differenza tra ". +" E ". +?"
- 28. Differenza tra stile dichiarabile e stile
- 29. Differenza tra getApplicationContext e classname.this
- 30. Differenza tra BufferedReader e BufferedInputStream
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/ –
Per MySQL - non tanto, si può avere indici su VARCHAR, non è possibile su un testo . –
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