2015-09-10 3 views
0

J'ai un problème avec MySQL ici, c'est assez étrange en fait ... c'est un vrai headbreak, j'essaye beaucoup de choses, coller du COLLATE, CAST, CONVERT, ... mais rien , peut-être que je ne le fais pas de la bonne façon, mais je suis vraiment perdu ici.comparaison et encodage mysql

Si certains pro a une pointe;) voici mon problème:

SELECT col FROM tabl LIMIT 0,1 

retours: helloworld01

CASE WHEN((SELECT col FROM tabl LIMIT 0,1) = 'helloworld_01') THEN 'ok' ELSE 'ko' END 

retours: ok

CASE WHEN(SUBSTR('helloworld_01',1,1) = 'h') THEN 'ok' ELSE 'ko' END 

retours: ok

MAIS et cela je s où il se étrange

CASE WHEN(SUBSTR((SELECT col FROM tabl LIMIT 0,1),1,1) = 'h') 
THEN 'ok' ELSE 'ko' END 

retours: ko

après avoir vérifié manuellement chaque lettre que je trouve que le résultat est assez étrange ... des chiffres et des lettres dans le bon ordre, mais chaque caractère est pas celui supposé être ... je reçois quelque chose comme lsuejwodhb_65 .... mais ne change pas à chaque demande ... et ils ne correspondent pas à leur code CHAR soit ....

Répondre

1

C'est parce que dans votre requête ci-dessous ce n'est pas toujours garanti de sortir helloworld_01 sauf si vous avez seulement une ligne qui est très rare; puisque vous n'avez utilisé aucune clause order by. Les données renvoyées peuvent donc être différentes et votre condition ne correspond pas du tout. Pour être sûr, utilisez une clause order by. Encore une fois, sans une order by en utilisant la clause LIMIT n'a aucun sens.

SELECT col FROM tabl order by col LIMIT 0,1 

Appliquez votre requête étrange comme ci-dessous et voir si elle correspond cette fois

CASE WHEN(SUBSTR((SELECT col FROM tabl order by col LIMIT 0,1),1,1) = 'h') 
THEN 'ok' ELSE 'ko' END 
+0

hey, merci pour la réponse, mais la table est une longue rangée .... je aurais dû dire que: – user1906731

+0

@ user1906731, alors ce n'est absolument pas possible. Voir une preuve ici http://sqlfiddle.com/#!9/49bd5/2 pour ma réclamation. envisager d'accepter la réponse si cela a aidé. – Rahul

+0

hé, merci pour le lien que je ne connaissais pas SQLFidle ... kewl :) bien que j'ai toujours mon problème, et je peux vous assurer que ce que je décris est ce qui se passe, même avec SUBSTR (user() ,. .. ou tout var global ... Mais j'utilise python, parler à php, parler à SQL alors peut-être il y a une partie de la raison ici ....? !!! – user1906731