Tutto quello che so delle loro differenze è varchar
limitato e text
non lo è. La documentazione non menziona questo.
È davvero l'unica differenza? Nessuna considerazione sulle prestazioni o ecc?
Tutto quello che so delle loro differenze è varchar
limitato e text
non lo è. La documentazione non menziona questo.
È davvero l'unica differenza? Nessuna considerazione sulle prestazioni o ecc?
Risposte:
Lo sfondo è questo: il vecchio sistema Postgres utilizzava il linguaggio PostQUEL e utilizzava un tipo di dati denominato text
(perché qualcuno pensava che fosse un buon nome per un tipo che memorizza il testo). Quindi, Postgres è stato convertito per utilizzare SQL come linguaggio. Per ottenere la compatibilità SQL, invece di rinominare il text
tipo, è varchar
stato aggiunto un nuovo tipo . Ma entrambi i tipi usano le stesse routine C internamente.
Ora, in una certa misura e in alcuni punti, text
è codificato come tipo predefinito, nel caso in cui non si possa derivare nient'altro. Inoltre, la maggior parte delle funzioni è disponibile solo come prendere un text
argomento o tornare text
. I due tipi sono binari compatibili, quindi il casting è un'operazione banale di analisi in tempo reale. Ma l'utilizzo text
è ancora nel complesso più naturale per il sistema.
Ma a parte questi punti positivi, non vi è alcuna differenza evidente. Usa quello che ti sembra più carino. ;-)
Vedi questa domanda simile . Il jist è che non c'è alcuna differenza, ma specificare una lunghezza massima come varchar(n)
generalmente non è a tuo favore, poiché utilizza più spazio ma non migliora le prestazioni.
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
testo senza lunghezza dichiarata. Non ci sono differenze di prestazioni tra questi due tipi.