[MySQL] problème avec la clause IN

problème avec la clause IN [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 02-02-2006 à 09:57:10    

Bonjour,
 
Après avoir découvert que MySQL gère trop difficilement les sous-requêtes, j'ai décomposé ma requête en deux. Voici la deuxième :
 

Code :
  1. SELECT numpiece, datepiece
  2. FROM latable
  3. WHERE numpiece IN ('piece2', 'piece3', 'piece6', 'piece24')
  4. AND datepiece BETWEEN '2006/01/01' AND '2006/02/01';


 
Le contenu du IN est le résultat de la 1ère requête, mise en forme par PHP.
Et voilà ce qu'il me lance :
 

Code :
  1. #1271 - Illegal mix of collations for operation ' IN '


 
Dois-je comprendre que MySQL gère également mal les IN, ou bien ai-je fais une erreur invisible à mes yeux ?? Merci de votre aide.
 
Joss

Reply

Marsh Posté le 02-02-2006 à 09:57:10   

Reply

Marsh Posté le 02-02-2006 à 11:03:26    

avec une recherche google rapide, on trouve que ce message d'erreur n'est pas nouveau. Et qu'assez souvent c'est un probleme de charset (encodage des caracteres) qui en est la cause.
 
Ca ne veut pas dire que MySql ne sait pas faire de IN.


---------------
MZP est de retour
Reply

Marsh Posté le 02-02-2006 à 11:17:38    

josserand_ joss > Quelle est la version de mysql? C'était quoi ta fameuse requette avec sous requette qui ne marchait pas?
 
Avec mysql5, je fais quasiment chaque semaine des requettes avec des sous requettes et des requettes avec des jointures. On utilise également des requettes avec des "IN" et tout ça marche trés bien.
 
Comme dit cinocks, si tu veux faire un "IN" il faut que les deux côtés du "IN" et toutes les valeurs à droite du "IN" aient le même charset. Pour régler le charset d'un élément, de mémoire, il faut utiliser "COLLATE".

Reply

Marsh Posté le 02-02-2006 à 11:44:58    

Ma version est le 4.1.9.
 
J'avais en effet bien vu sur Google que ce message n'était pas nouveau... mais j'en ai pas décrypté la raison...
 
Le charset de mes champs est "latin1_general_ci" (ce qui n'est pas le charset par défaut). Faut-il que je remette cette valeur par défaut (ou que j'utilise le COLLATE) ? Ca se joue sur si peu ?
 
Pourriez-vous, si possible, me renseigner sur la manière dont s'utilise le COLLATE avec mon IN ?... parce que j'ai pas vraiment capté.
 
Omega2, pour les sous-requêtes, avec ma version 4, dès que tu imbriques 2 sous-requêtes, le serveur MySQL plante complètement.
Cette requête était du style :
 
SELECT numpiece, datepiece
FROM latable
WHERE numpiece IN (SELECT numpiece FROM autretable WHERE...);
 
avec d'autres sous-requêtes, mais le IN devait pas lui plaire encore.
 
Merci !

Reply

Marsh Posté le 02-02-2006 à 12:01:35    

Pour la branche 4.1, ils en sont à la 4.1.16. Ta requette faisait peut être planter le serveur à cause d'un bug corrigé depuis.
 
Pour le "collate", le mieux, c'est encore de regarder dans la documentation de mysql, c'est comme ça qu'on apprend le mieux et t'y trouveras quelques exemples. :)
 
Pour une documentation en ligne avec moteur de recherche, t'as le site www.mysql.com et également sur www.nexen.net même s'il y a encore quelques problémes sur ce dernier.

Reply

Marsh Posté le 02-02-2006 à 12:11:29    

Je te remercie pour les infos !!
 
En cas de repépin, je reposte ici. Merci !

Reply

Sujets relatifs:

Leave a Replay

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