Aller au contenu

Typage champ Mysql


dièse

Sujets conseillés

Bonjour,

Faire une requête sur 2 tables quand la jointure est faite entre 2 champs de types différents (caractère/numérique) c'est pas joli joli mais c'est possible :blush:.

Est-ce que quelqu'un pourrait me certifier que ce type de jointure a un impact négatif en terme de performances ?

Merci ^_^

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je ne sais pas si MySQL possède des fonctions de transtypage. Enfin, comme depuis la version 5 tu peux écrire tes fonctions, cela reste faisable.

Evidemment, au niveau des performances, puisque tu dois, en plus de la jointure effectuer un transtypage, ta requête sera moins rapide qu'une jointure classique.

Pourrais-tu décrire tes tables ainsi que la requête pour qu'on y jette un oeil ? Ca m'étonne que tu doives faire ce genre de jointure sur deux champs de types différents.

Cordialament

Modifié par V0r_X
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Rien n'est jamais obligatoire mais je m'interroge :P.

J'aimerai justement savoir en quoi consiste ce transtypage, et surtout savoir si il n'est pas effectuer de manière systématique sur tous les champs. Car si tel est le cas, il n'y a aucune perte de performance avec ce genre de jointure.

Modifié par dièse
Lien vers le commentaire
Partager sur d’autres sites

Je ne pense pas que MySQL transtype les données automatiquement. Tu peux toujours essayer dans phpMyAdmin (ou autre) ta requête, et tu verras bien si tu as des messages d'erreur.

Je persiste donc à te conssiller d'écrire une fonction pour le transtypage, si tu tournes sous MySQL 5. Dans le cas contraire, cherches dans le manuel, tu trouveras sûrement des fonctions qui t'aideront.

Lien vers le commentaire
Partager sur d’autres sites

Dans la documentation, j'ai trouvé la réponse à ta question. Je dois te présenter mes excuses.

MySQL transtype en effet les chaînes de caratères en entiers lors des comparaisons. Par exemple, tu peux écrire des trucs comme '1' < 3, ou '0' = 0.

Acceptes mes excuses, j'ai, comme à l'accoutumée, plus compté sur ce que je croyais vrai que sur la doc :nono:

Le prochain coup, je lirai la doc avant de poster sur un forum ;)

Lien vers le commentaire
Partager sur d’autres sites

Si j'ai posé la question sur le forum, c'est que j'avais auparavant cherché dans la doc mais que je n'avais rien trouvé. Je n'avais pas pensé à regarder la section sur les opérateur... c'est donc moi qui te remercie ;).

La conclusion est donc bien que ce type de requête est plus lourde.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...