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 A.tel,B.dkhid
from (
select m() mid,tel from temp02 where temp02.dkhid=‘‘) A
inner 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‘)) B
on 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=‘‘) A
inner join
(select mo() as id,tmp_dkh.dkhid from tmp_dkh order by tmp_dkh.dkhid) B
on A.mid=B.id
end ;
$$ delimiter ;
就正常了 ,mysql服务没有自动添加name_const,执行正常,结果正确。
个人猜测:估计是解析器无法正确识别单个字段的字符集,所以在字段前面加上添加上表明就ok了
本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.51cto.com/2826417/1393459