484 votes

Comment faire la différence entre une chaîne de caractères et un texte dans un système de gestion de projet ?

Je suis en train de créer une nouvelle application web en utilisant Rails, et je me demandais quelle était la différence entre string y text ? Et quand doit-on utiliser chacun d'eux ?

576voto

tjeezy Points 2873

La différence réside dans la manière dont le symbole est converti en son type de colonne respectif dans le langage de requête.

avec MySQL :string est converti en VARCHAR(255)

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

Référence :

https://hub.packtpub.com/working-rails-activerecord-migrations-models-scaffolding-and-database-completion/

Quand faut-il utiliser chacun d'entre eux ?

En règle générale, il convient d'utiliser :string pour la saisie de textes courts (nom d'utilisateur, adresse électronique, mot de passe, titres, etc. :text pour les entrées plus longues telles que les descriptions, le contenu des commentaires, etc.

14 votes

Je pense qu'une meilleure règle de base est de toujours utiliser :text . Voir depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text

85 votes

Pour MySQL, ce n'est pas le cas. Vous pouvez avoir des index sur les variables, mais pas sur le texte.

20 votes

L'implémentation de PostgreSQL préfère le texte. La seule différence entre pg string/text est la contrainte de longueur pour les chaînes. Il n'y a pas de différence de performance.

180voto

Omar Qureshi Points 5755

Si vous utilisez Postgres, utilisez du texte partout où vous le pouvez, à moins que vous n'ayez une contrainte de taille, car il n'y a pas de pénalité de performance pour le texte par rapport au varchar.

Il n'y a pas de différence de performance entre ces trois types, mis à part l'augmentation de l'espace de stockage lors de l'utilisation du type " blank-padded ", et quelques cycles CPU supplémentaires pour vérifier la longueur lors de l'enregistrement dans une colonne à longueur limitée. Alors que character(n) présente des avantages en termes de performances dans d'autres systèmes de bases de données, il n'en est rien dans PostgreSQL ; en fait, character(n) est généralement le plus lent des trois en raison de ses coûts de stockage supplémentaires. Dans la plupart des cas, il est préférable d'utiliser text ou character varying

Manuel PostsgreSQL

5 votes

Mais dans l'intérêt d'être agnostique en matière de base de données, est-ce la meilleure approche ? Que se passe-t-il si vous souhaitez modifier la base de données ? Je l'admets, dans le monde réel, cela n'arrive pas si souvent, mais tout de même... s'il n'y a "aucune différence de performance", pourquoi ne pas s'en tenir à l'utilisation prévue de la chaîne de caractères pour les choses courtes et du texte pour les choses plus longues ? Et compte tenu de votre propre commentaire sur l'indexation des chaînes, cela semble être la meilleure approche.

8 votes

Il existe de nombreuses raisons pour lesquelles cela peut s'avérer nécessaire dans le monde réel, où il est préférable de se débarrasser de l'idée qu'il n'existe qu'une seule vraie solution à tous les problèmes.

23 votes

C'est possible, mais l'agnosticisme des bases de données est un faux prophète.

18voto

berkes Points 9945

String se traduit par "Varchar" dans votre base de données, tandis que text se traduit par "texte". Un varchar peut contenir beaucoup moins d'éléments, tandis qu'un texte peut avoir (presque) n'importe quelle longueur.

Pour une analyse approfondie avec de bonnes références, consultez http://www.pythian.com/news/7129/text-vs-varchar/

Edita: Certains moteurs de base de données peuvent charger varchar en une seule fois, mais en stockant le texte (et le blob) en dehors du tableau. A SELECT name, amount FROM products pourrait être beaucoup plus lent lorsque l'on utilise text para name que lorsque vous utilisez varchar . Et puisque Rails, par défaut, charge les enregistrements avec SELECT * FROM... vos colonnes de texte seront chargées. Cela ne sera probablement jamais un vrai problème dans votre ou mon application, cependant (l'optimisation prématurée est ...). Mais il est bon de savoir que le texte n'est pas toujours "gratuit".

13voto

Gurudath BN Points 897

Chaîne si la taille est fixe et petite et texte si elle est variable et grande. C'est important car le texte est beaucoup plus grand que les chaînes de caractères. Il contient beaucoup plus de kilo-octets.

Ainsi, pour les petits champs, utilisez toujours string(varchar). Des champs comme le prénom, le login, l'email, le sujet (d'un article ou d'un post) et des exemples de textes : contenu/corps d'un post ou d'un article, champs pour les paragraphes, etc.

Taille de la chaîne de 1 à 255 (par défaut = 255)

Taille du texte 1 à 4294967296 (par défaut = 65536)2

12voto

ajet Points 247

Comme expliqué ci-dessus, le type de données de la base de données n'est pas le seul à affecter la vue qui sera générée si vous faites de l'échafaudage. string génère un champ text_field text génère une zone text_area

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X