Est varchar
-ce qu'un simple résidu d'avant text
est arrivé ou existe-t-il des cas d'utilisation où vous souhaiteriez utiliser un varchar
? (Ou char
d'ailleurs ..)
(J'utilise Postgres et MySQL (MyISAM) quotidiennement, alors ce sont ceux qui m'intéressent le plus, mais les réponses pour d'autres bases de données sont bien sûr les bienvenues. ^ _-)
text
est obsolète. Il existe également des considérations d'utilisation liées au lieu où les données sont stockées et à la manière dont elles sont accessibles.Réponses:
En général
text
les colonnes sont non standard et spécifiques à l'implémentation. Dans de nombreux cas, en fonction de la base de données, ils peuvent combiner une ou plusieurs des restrictions suivantes: non indexable , non interrogeable et non triable .Dans Postgres
Tous ces types sont sauvegardés en interne en utilisant la même structure de données C. .
En MySQL
La
text
colonne est une version spécialisée deBLOB
et comporte des restrictions d’indexation.Seuls ces deux exemples peuvent être extrapolés aux autres systèmes SQL SGBDR et devraient constituer une raison suffisante pour comprendre quand choisir un type plutôt qu'un autre.
CHAR
lorsque vous savez que vous avez un nombre fixe de caractères pour chaque entrée.VARCHAR
lorsque vous avez un nombre variable de caractères pour chaque entrée.VARCHAR
pouvez en fournir, utilisezCLOB
unUTF-8
codage ou un type de norme équivalente.TEXT
car c'est non standard.la source
non standard and implementation specific
etnot indexable, not searchable and not sortable
que je n'ai pas réalisé. J'étais sous l'impressiontext
était normalisée.text
norme ASCII ou latext
norme UNICODE :-) ou l'une des autres demi-douzaines detext
normes de codage?text
que ce soit en tant que type de caractère. Je n'ai rien vu, certains vendeurs l'appellentlong char
, etc., il s'agit en fait d'un BLOB auquel est associé un codage.TEXT
". Si vous allez migrer vers une autre base de données, qui est à peine un briseur d'affaire, d' autant plus que vous devez considérer que postgres' illimitéVARCHAR
( en raison de TOAST il n'y a pas de limite de ligne comme par exemple avec MySQL) ne peut pas se traduire par illimitéeVARCHAR
en d'autres bases de toute façon.text
,varchar
Etchar
sont tous utilisés pour des raisons différentes. Il y a bien sûr des différences de mise en œuvre (quelle taille occupent-elles, etc.), mais il y a aussi des considérations d' utilisation et d' intention . Le type que vous utilisez vous dit également quelque chose sur le type de données qui y seront stockées (ou que nous utiliserions toustext
pour tout ). Si quelque chose a une longueur fixe, nous utilisonschar
. S'il a une longueur variable avec une limite supérieure bien définie, utilisez-levarchar
. Si vous avez peu de contrôle sur un texte volumineux, cetext
serait probablement votre meilleur choix.la source
char
,varchar
ettext
sont conçus pour stocker le même genre de données. Donc, les deux réponses ici concernent la vérification des limites. S'il y a des différences d'efficacité, quelles sont-elles? Pourquoi devrais-je utiliservarchar
dessustext
?Les bases de données sont extrêmement préoccupées par les performances - rapidité et minimisation du stockage. Dans la plupart des autres parties du monde informatique, vous ne vous soucierez pas du nombre de caractères dans votre chaîne de caractères; ça pourrait être un, ça pourrait être tout le contenu d'une encyclopédie; c'est juste une ficelle. En fait, beaucoup de langages ne vous dérangent même pas, qu'il s'agisse d'une chaîne ou d'un nombre.
Mais à mesure que les ordinateurs deviennent plus rapides et gagnent en mémoire, les utilisateurs mettent plus de données dans leurs bases de données et effectuent des requêtes plus sophistiquées. Pour une base de données, le processeur et la mémoire sont tout aussi limitants qu'aujourd'hui, à l'époque de la mémoire principale de 64 Ko et des disques durs de 10 Mo (sur les ordinateurs centraux ).
Un nombre fixe d'octets est beaucoup plus facile à traiter qu'un nombre de longueur variable. 10 octets est beaucoup plus facile à traiter que 1 000 000. Votre base de données souhaite donc que vous lui donniez un indice afin de vous donner un gigaoctet de résultats à partir de terrabytes de données en microsecondes. Si vous n'utilisez pas votre base de données aussi difficilement, vous n'aurez pas besoin de la rapidité offerte et vous serez ennuyé par les questions inutiles. Mais si vous avez besoin de la performance, vous serez heureux de lui donner quelques indices.
Comme il est indiqué dans les autres réponses, l' utilisation
char
si elle utilise toujours un certain nombre de caractères,varchar
si la longueur peut varier , mais il ne soit pas trop grand (ma conjecture est plus le traitement de DB comme unchar
outext
selon la taille), ettext
si elle pourrait être n'importe quelle longueur. Si vos tentatives SQL d'utiliser unetext
colonne, il pourrait être préférable de le résumer en quelque sorte et le mettre dans unechar
ou petitevarchar
colonne aussi, puis fairewhere
« s etorder by
s » sur ce point . Bien sûr, cela ne dépend que de la performance.la source