Comparaison Varchar et Text

Comparaison Varchar et Text - SQL/NoSQL - Programmation

Marsh Posté le 13-06-2007 à 17:28:57    

Bonjour,
je suis actuellement en train de travailler sur une base de données SQL Sever et je me heurte au problème de comparaison entre des données de type TEXT et VARCHAR. En effet je récupère systématiquement le message d'erreur : "Les types de données text et varchar sont incompatibles dans l'opérateur equal to.".
 
Une solution est elle envisageable ou dois je changer le type de donnée TEXT en VARCHAR(x) ?
 
 :hello:

Reply

Marsh Posté le 13-06-2007 à 17:28:57   

Reply

Marsh Posté le 13-06-2007 à 17:50:14    

la question est mal posée.
 
grossomodo, le format "TEXT" est un format "binaire" de taille infinie (bon, y'a une limite, mais largement suppérieure aux besoin). pour cette raison, dans un souci de performances, SQL Server (comme tout autre SGBD) interdit les oppérations de chaîne dessus, car beaucoup trop consommatrices.
LIKE ou = par exemple ne sont pas supportés.
 
Convertir les champs TEXT en VARCHAR() est une bonne idée dans la mesure du possible. Effectivement, quand on choisi TEXT, c'est normalement en connaissance de cause : j'ai besoin de plus de 8000 caractères. Si dans ton cas c'est un choix "par erreur", alors la question ne se pose pas, il faut impérativement que tu passes en VARCHAR().
Dans le cas contraire, il existe des méthodes permettant d'extraire du texte au format VARCHAR à partir d'un TEXT afin de faire des oppérations de comparaison, mais ceci est extrêment lent.
 
Ensuite, je t'invite à te pencher sur les fonctionnalités d'Indexaction de texte (FULLTEXT INDEX). Il permette d'indexer rapidement de gros volumes de texte, et permettent d'effectuer des recherches extrêment rapides dedans. Cela apporte aussi son lot de fonctions plus ou moins intéressances, comme "même radicale", "près de", "même champ lexical", etc. mais aussi des indices de pertinances dans les résultats.

Reply

Marsh Posté le 13-06-2007 à 18:06:13    

MagicBuzz a écrit :

la question est mal posée.
 
grossomodo, le format "TEXT" est un format "binaire" de taille infinie (bon, y'a une limite, mais largement suppérieure aux besoin). pour cette raison, dans un souci de performances, SQL Server (comme tout autre SGBD) interdit les oppérations de chaîne dessus, car beaucoup trop consommatrices.
LIKE ou = par exemple ne sont pas supportés.
 
Convertir les champs TEXT en VARCHAR() est une bonne idée dans la mesure du possible. Effectivement, quand on choisi TEXT, c'est normalement en connaissance de cause : j'ai besoin de plus de 8000 caractères. Si dans ton cas c'est un choix "par erreur", alors la question ne se pose pas, il faut impérativement que tu passes en VARCHAR().
Dans le cas contraire, il existe des méthodes permettant d'extraire du texte au format VARCHAR à partir d'un TEXT afin de faire des oppérations de comparaison, mais ceci est extrêment lent.
 
Ensuite, je t'invite à te pencher sur les fonctionnalités d'Indexaction de texte (FULLTEXT INDEX). Il permette d'indexer rapidement de gros volumes de texte, et permettent d'effectuer des recherches extrêment rapides dedans. Cela apporte aussi son lot de fonctions plus ou moins intéressances, comme "même radicale", "près de", "même champ lexical", etc. mais aussi des indices de pertinances dans les résultats.


 
Conclusion : merci pour la réponse et pour l'explication.
 
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed