fgdfg 发表于 2018-9-28 09:06:06

mysql 中的奇葩问题:NAME_CONST

  mysql 中的奇葩问题:NAME_CONST
  本人在一次项目开发中 ,开发了一个sp .这个sp 很简单 ,就是表的内连接 ,
  然后将数据展现出来 .
  代码如下:
  delimiter $$
  create proceduresp_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,dkhidfrom tmp_dkhorder 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 proceduresp_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.dkhidfrom tmp_dkhorder by tmp_dkh.dkhid) B
  on A.mid=B.id
  end;
  $$ delimiter ;
  就正常了 ,mysql服务没有自动添加name_const,执行正常,结果正确。
  个人猜测:估计是解析器无法正确识别单个字段的字符集,所以在字段前面加上添加上表明就ok了

页: [1]
查看完整版本: mysql 中的奇葩问题:NAME_CONST