2009-07-01 6 views

Répondre

22

Ils sont identiques.

De la documentation PostgreSQL:

http://www.postgresql.org/docs/8.3/static/datatype-character.html

Conseil: Il n'y a pas de performance différences entre ces trois types, à part la taille de stockage accrue lorsque en utilisant le type complété par des blancs, et quelques cycles supplémentaires pour vérifier la longueur lorsque stocker dans une colonne contrainte de longueur. Alors que le caractère (n) a des avantages de performance dans d'autres systèmes de base de données , il n'a pas de tels avantages dans PostgreSQL. Dans la plupart des situations, le texte ou le caractère doit être utilisé à la place.

Ici, ils parlent des différences entre char (n), varchar (n) et texte (= varchar (1G)). L'histoire officielle est qu'il n'y a pas de différence entre varchar (100) et texte (très grand varchar).

+0

Je parle de VARCHAR (m) vs VARCHAR (n), pas VARCHAR vs CHAR, qui est ce que vous pointez. – ibz

+1

Vérifiez à nouveau. Ils se réfèrent aux TROIS étant identiques. C'est à dire. la performance de varchar (n) est la même que le texte, qui est varchar (LOTS). La seule différence entre les TROIS types est le bourrage et la contrainte de longueur. Ni s'appliquent entre varchar (100) et varchar (500), donc ils disent qu'ils sont les mêmes. –

+1

Oui, ils mentionnent tous les trois, mais ils insistent seulement sur deux. En fait, j'ai posé cette question sur SO exactement parce que je n'étais pas heureux avec ce paragraphe particulier dans le document et je cherchais une explication plus perspicace. Et non, TEXT n'est * pas * le même que VARCHAR (LOTS). TEXT est stocké en dehors de la ligne. Au moins AFAIK. – ibz

6

TEXTE/est/le même que VARCHAR sans une longueur explicite, le texte

« L'exigence de stockage pour une courte chaîne (jusqu'à 126 octets) est de 1 octet plus la chaîne réelle, qui comprend le rembourrage de l'espace dans le cas de caractère. les chaînes plus longues ont 4 octets tête au lieu de 1. les chaînes longues sont compressées par le système automatiquement, donc l'exigence physique sur le disque est peut-être moins. des valeurs très longues sont aussi sto rouge dans tables de fond de sorte qu'ils ne interférer avec un accès rapide à plus court valeurs de la colonne. Dans tous les cas, la plus longue chaîne de caractères possible que peut être stocké est d'environ 1 Go. »

fait référence à la fois VARCHAR et TEXT (depuis VARCHAR (n) est juste une version limitée de texte). Limiter votre VARCHARS n'a artificiellement aucun avantage réel en termes de stockage ou de performances (le temps système dépend de la longueur réelle de la chaîne et non de la longueur de la variable varchar), sauf pour les comparaisons avec les caractères génériques et les expressions régulières. vous devriez probablement regarder quelque chose comme support de l'indexation de texte intégral de PostgreSQL)

Questions connexes