navicat premium 10(mysql 5.0.91-enterprise-gpl-nt-log)正常语句:
select USER_ID as 姓名, count(*) as 次数, 10-count(*) as 缺勤, (select @begin) as 始于, (select @end) as 终于 from attend_duty
where (DATE_FORMAT(register_time, '%Y-%m-%d') >= @begin && DATE_FORMAT(register_time, '%Y-%m-%d') <= @end)
group by USER_ID
order by 次数;加入set语句后乱码:
set @begin='2012-07-02';
set @end='2012-07-06';
select USER_ID as 姓名, count(*) as 次数, 10-count(*) as 缺勤, (select @begin) as 始于, (select @end) as 终于 from attend_duty
where (DATE_FORMAT(register_time, '%Y-%m-%d') >= @begin && DATE_FORMAT(register_time, '%Y-%m-%d') <= @end)
group by USER_ID
order by 次数;姓名、次数、缺勤、始于、终于,这五个词乱码,其他正常,请教原因,非常感谢。

解决方案 »

  1.   

     (DATE_FORMAT(register_time, '%Y-%m-%d') >= @begin && DATE_FORMAT(register_time, '%Y-%m-%d') <= @end)这儿非常奇怪的用了一个 && ,好像是C中的, MYSQL中似乎应该是直接用 AND
    乱码的问题,你可以试一下 set names 'gbk';
    set @begin='2012-07-02';
    set @end='2012-07-06';
    set names 'gbk';
    select USER_ID as 姓名, count(*) as 次数, 10-count(*) as 缺勤, (select @begin) as 始于, (select @end) as 终于 from attend_duty
    where (DATE_FORMAT(register_time, '%Y-%m-%d') >= @begin && DATE_FORMAT(register_time, '%Y-%m-%d') <= @end)
    group by USER_ID
    order by 次数;
      

  2.   

    set names 'gbk';
    set @begin='2012-07-02';
    set @end='2012-07-06 23:59:59';
    select USER_ID as `姓名`, count(*) as `次数`, 10-count(*) as `缺勤`, @begin as `始于`,  @end as `终于` from attend_duty
    where register_time between @begin and @end
    group by USER_ID
    order by `次数`;