有一个SQL语句如下:
mysql> select date_format(consumetime,'%Y年%m月') 月份, sum(case consumetype when '必须支出' then money else 0 end) 必须支出 from dailyconsume group by date_format(consumetime,'%Y年%m月');执行后必须支出栏位的值总是0。
然后我将数据库里“必须支出”改为某个英文单词如“aaa”,然后相应修改上面的语句,结果执行正确。这样看来好象是中文字符的问题,但是下面这个语句却可以执行:
select * from dailyconsume where consumttype = '必须支出'
操作系统为WIN7家庭版
配置文件内容如下:
[mysqld] 
# 设置mysql的安装目录 
basedir=D:\mysql\mysql-5.1.6-alpha-win32
# 设置mysql数据库的数据的存放目录,必须是data,或者是\\xxx\data 
datadir=D:\mysql\mysql-5.1.6-alpha-win32\data
# 设置mysql服务器的字符集
default-character-set=utf8[client]
# 设置mysql客户端的字符集
default-character-set=gbk

解决方案 »

  1.   

    按下贴中的方法贴出你的检查结果http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    谢谢,我用show full fields from dailyconsume看了下,发现consumetype这个栏位的类型为utf8_general_ci,觉得不对,但怎么修改?
    show variables like 'char%'的结果如下:如何修改,请指点,谢谢!
      

  3.   

    show variables like 'char%'  的结果:
    character_set_client        gbk
    character_set_connection    gbk
    character_set_database      utf8
    character_set_filesystem    binary
    character_set_results       gbk
    character_set_server        utf8
    character_set_system        utf8
    character_set_dir           D:\....
      

  4.   

    character_set_client gbk
    character_set_connection gbk
    character_set_results gbk把这三个都设定为 UTF8 ,你的问题应该就可以解决. 
      

  5.   

    回五楼:我把三个都设为UTF8了,可是没用(SET NAMES 'UTF8';)而且这样做后我从数据库抓出来的中文数据全部变为乱码了
    这两个语句都是在本机DOS窗口下跑出来的,服务器和客户端都在本机上,统一编码什么意思,把服务器和客户端的编码设为一致?
    我很奇怪,为什么用CASE判断就不等,用=判断却可以得到相等的结果。
    各位大侠,麻烦再给些建议!