天天看点

mysql 中的奇葩问题:NAME_CONST

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='') A

inner join 

(select mo() as id,dkhid  from tmp_dkh  order by dkhid) B

on A.mid=B.id

end  ;

$$ delimiter ;

就是这么一个简单的sp,但是展现的结果始终有问题

dkhid列始终未为空

然后是在没办法了,我就使用 show full PROCESSLIST

看一下这个mysql服务是怎么执行这个sp的,然后我就发现问题了。

mysql 服务执行的sp 如下 :

select m() mid,tel from temp02 where temp02.dkhid='') A

(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')) B

on A.mid=B.id  

问题出在name_const上,name_const是系统加上的。

之后我把sp修改了下 

select m() mid,temp02.tel from temp02 where temp02.dkhid='') A

(select mo() as id,tmp_dkh.dkhid  from tmp_dkh  order by tmp_dkh.dkhid) B

就正常了 ,mysql服务没有自动添加name_const,执行正常,结果正确。

继续阅读