Je crée une nouvelle application Web à l'aide de Rails et je me demandais quelle est la différence entre string
et text
? Et quand faut-il les utiliser?
436
Je crée une nouvelle application Web à l'aide de Rails et je me demandais quelle est la différence entre string
et text
? Et quand faut-il les utiliser?
La différence repose sur la façon dont le symbole est converti en son type de colonne respectif dans le langage de requête.
avec MySQL: la chaîne est mappée sur 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)
Référence:
Quand faut-il utiliser chacun?
En règle générale, utilisez-le :string
pour la saisie de texte court (nom d'utilisateur, e-mail, mot de passe, titres, etc.) et utilisez-le :text
pour une saisie plus longue, comme les descriptions, le contenu des commentaires, etc.
:text
. Voir depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-texttrue
dans un varchar (ergo,string
champ de type) dans MySQL sérialise la valeur1
(ce qui est tout à fait juste). Cependant, soustext
type, le stockage de la valeur "true" finit par le sérialiser en tant que caractère singuliert
. J'ai migré une colonne sans m'en rendre compte et toutes les lignes futures où la valeur est vraie le sont maintenantt
. Quelqu'un a-t-il une idée de ce comportement?Si vous utilisez postgres, utilisez du texte partout où vous le pouvez, sauf si vous avez une contrainte de taille car il n'y a pas de pénalité de performance pour le texte vs varchar
Manuel de PostsgreSQL
la source
text
de(n)
types de données Over sont convaincants, mais l'argument pour l'utilisationtext
Overvarchar
n'est pas. Il dit que ce sont les mêmes mais préfèretext
parce qu'ilvarchar
peut être confondu avecvarchar(n)
et parce qu'iltext
y a moins de caractères à taper. Mais en utilisanttext
au lieu devarchar
, vous perdez le contexte selon lequel les données stockées ne devraient pas être longues. Par exemple, le stockage d'un nom d'utilisateur avectext
me semble trompeur.La chaîne se traduit par "Varchar" dans votre base de données, tandis que le texte se traduit par "texte". Un varchar peut contenir beaucoup moins d'éléments, 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/
Modifier: certains moteurs de base de données peuvent se charger
varchar
en une seule fois, mais stocker du texte (et un blob) en dehors du tableau. UnSELECT name, amount FROM products
pourrait être beaucoup plus lent lors de l'utilisationtext
dename
que lors de l'utilisationvarchar
. Et depuis Rails, par défaut, les enregistrements chargés avecSELECT * FROM...
vos colonnes de texte seront chargés. Ce ne sera probablement jamais un vrai problème dans votre application ou dans celle-ci (l'optimisation prématurée est ...). Mais savoir que le texte n'est pas toujours "gratuit" est bon à savoir.la source
Chaîne si la taille est fixe et petite et texte si elle est variable et grande. C'est assez important parce que le texte est bien plus gros que les chaînes. Il contient beaucoup plus de kilo-octets.
Donc, pour les petits champs, utilisez toujours string (varchar). Des domaines comme. prénom, login, email, sujet (d'un article ou d'un post) et exemple de textes: contenu / corps d'un post ou d'un article. champs pour les paragraphes, etc.
Taille de chaîne 1 à 255 (par défaut = 255)
Taille du texte 1 à 4294967296 (par défaut = 65536) 2
la source
Comme expliqué ci-dessus, non seulement le type de données db, il affectera également la vue qui sera générée si vous êtes un échafaudage. chaîne générera un text_field texte générera un text_area
la source
Utilisez une chaîne pour un champ plus court, comme les noms, l'adresse, le téléphone, la société
Utilisez du texte pour un contenu plus large, des commentaires, du contenu, des paragraphes.
Ma règle générale, si c'est quelque chose qui est plus d'une ligne, je vais généralement pour le texte, si c'est un court 2-6 mots, je vais pour la chaîne.
La règle officielle est 255 pour une chaîne. Donc, si votre chaîne contient plus de 255 caractères, optez pour le texte.
la source
Si vous utilisez oracle ...
STRING
sera créé commeVARCHAR(255)
colonne etTEXT
, comme aCLOB
.https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
la source
La réponse acceptée est impressionnante, elle explique correctement la différence entre la chaîne et le texte (principalement la taille limite dans la base de données, mais il y a quelques autres pièges), mais je voulais souligner un petit problème qui m'a permis de passer au travers de cette réponse ne l'a pas complètement fait pour moi.
La taille maximale : limit => 1 à 4294967296 ne fonctionnait pas exactement comme indiqué, je devais aller à -1 à partir de cette taille maximale. Je stocke de gros blobs JSON et ils peuvent parfois être énormes.
Voici ma migration avec la plus grande valeur en place avec la valeur dont MySQL ne se plaint pas.
Notez le 5 à la fin de la limite au lieu de 6
la source
Si l'attribut est correspondant à
f.text_field
l'utilisation de la forme chaîne , si elle est correspondant à l'f.text_area
utilisation du texte .la source