mysql比较和编码

时间:2015-09-10 02:46:32

标签: mysql encoding

我在这里遇到了MySQL的问题,实际上很奇怪......这是一个真正的开端,我一直在尝试很多东西,坚持一些COLLATE,CAST,CONVERT,......但没什么,也许我我没有做正确的方式,但我真的迷失了。

如果有专业人士提示;)这是我的问题:

SELECT col FROM tabl LIMIT 0,1 

返回:helloworld01

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

返回:确定

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

返回:确定

但这就是它变得奇怪的地方

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

返回:ko

手动检查每个字母后,我发现结果很奇怪......数字和字母的顺序正确,但每个字符都不应该是......我得到的东西就像lsuejwodhb_65  ....但是不要在每次请求时改变......而且他们也没有匹配他们的CHAR代码......

1 个答案:

答案 0 :(得分:1)

那是因为在你的下面的查询中,并不总是保证输出helloworld_01,除非你只有一行非常罕见;因为你没有使用任何order by条款。因此返回的数据可能不同,因此您的条件根本不匹配。确保使用order by子句。再一次,没有使用order by LIMIT条款是没有意义的。

SELECT col FROM tabl order by col LIMIT 0,1

尝试下面的奇怪查询,看看它是否与此次匹配

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