Qual è la differenza tra il tipo "varchar" e "testo" in PostgreSQL?


15

Tutto quello che so delle loro differenze è varcharlimitato e textnon lo è. La documentazione non menziona questo.

È davvero l'unica differenza? Nessuna considerazione sulle prestazioni o ecc?


1
Questo dovrebbe davvero essere migrato agli amministratori del database . Non ha nulla a che fare con l'amministrazione del server.
Evan Carroll,

Risposte:


22

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 texttipo, è varcharstato 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 textargomento 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. ;-)


Oh buona spiegazione. Userò "testo" perché non mi interessa la compatibilità che blocca sfruttando i vantaggi di un prodotto specifico. Grazie!
Eonil,

1

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.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.