2010-03-12 7 views
0

Je cours mysql 5.0 et j'ai créé un trigger. À peu près comme suit:MySql Trigger - Comparaison de chaînes dans IF Statment

SET @temp =(SELECT STATEMENT); 

IF(@temp = 'true') THEN 
    -code block 1- 
ELSE 
    -code block 2- 
END IF; 

Quand je lance mon instruction select seul, il retourne « vrai » mais dans le code ci-dessus « bloc de code 2 » est en cours d'exécution. Une idée pourquoi?

+0

Pouvez-vous inclure l'instruction select? Renvoie-t-il seulement une ligne et la chaîne "true" en minuscules? – JohnFx

+0

Renvoie une ligne avec la valeur en minuscules + ------------------ + | temp | + ------------------ + | vrai | + ------------------ + – David

+0

Peut-être que vous avez rencontré des problèmes de charset. Le jeu de caractères dans le déclencheur est UTF8 (IIRC), si le jeu de caractères de la table est incompatible, l'IF ne correspondra pas. – Johan

Répondre

0

Si votre instruction select renvoie une valeur booléenne alors cela devrait fonctionner:

SET @temp =(SELECT STATEMENT); 

IF(@temp = true) THEN 
    -code block 1- 
ELSE 
    -code block 2- 
END IF; 
0

Il ressemble à @temp contient beaucoup plus que « vrai ». Sans aucune information supplémentaire, cela semble qu'il devrait être réécrit afin que vous ne cherchiez pas à travers les chaînes. Cependant, cela peut être ce que vous cherchez (si « true » est dans la chaîne de retour):

IF (INSTR(@temp, 'true') > 0) THEN 
    -code block 1- 
ELSE 
    -code block 2- 
END IF