mysql name const_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 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了

原文:http://dwchaoyue.blog.51cto.com/2826417/1393459

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值