mysql 中的奇葩问题:NAME_CONST 本人在一次项目开发中 ,开发了一个sp .这个sp 很简单 ,就是表的内连接 ,然后将数据展现出来 . 代码如下:delimiter $$ create procedure sp_dkh_single() begin set @m=0; set @1=0;select A.tel,B.dkhid from (select m() mid,tel from temp02 where dkhid='') Ainner join (select mo() as id,dkhid from tmp_dkh order by dkhid) Bon A.mid=B.id end ;$$ delimiter ; 就是这么一个简单的sp,但是展现的结果始终有问题dkhid列始终未为空 然后是在没办法了,我就使用 show full PROCESSLIST看一下这个mysql服务是怎么执行这个sp的,然后我就发现问题了。 mysql 服务执行的sp 如下 :select A.tel,B.dkhid from (select m() mid,tel from temp02 where temp02.dkhid='') Ainner join (select mo() as id, NAME_CONST('dkhid',_utf8'' COLLATE 'utf8_general_ci') from tmp_dkh order by NAME_CONST('dkhid',_utf8'' COLLATE 'utf8_general_ci')) Bon A.mid=B.id 问题出在name_const上,name_const是系统加上的。 之后我把sp修改了下 代码如下:delimiter $$ create procedure sp_dkh_single() begin set @m=0; set @1=0;select A.tel,B.dkhid from (select m() mid,temp02.tel from temp02 where temp02.dkhid='') Ainner join (select mo() as id,tmp_dkh.dkhid from tmp_dkh order by tmp_dkh.dkhid) Bon A.mid=B.id end ;$$ delimiter ; 就正常了 ,mysql服务没有自动添加name_const,执行正常,结果正确。
个人猜测:估计是解析器无法正确识别单个字段的字符集,所以在字段前面加上添加上表明就ok了