我正在使用此查询生成博客存档菜单,如下所示:
SELECT CONCAT( MONTHNAME(published) , ' ' , YEAR(published)) AS monthyear,
COUNT(*) AS total
FROM blog_articles
WHERE status = 'Online' AND Year(published) = 2012
GROUP BY CONCAT( MONTHNAME(published) , ' ' , YEAR(published))
预期结果:
January 2012 103
February 2012 87
March 2012 23
April 2012 99
实际结果:
计数是正确的,但不是精神东方,它应该是:
May 2012 1
我如何摆脱有趣的角色并改为使用英语?
当我在phpMyAdmin中运行此查询时,字符很好。
更新
我刚尝试运行conn.Execute(“SET lc_time_names ='en_US';”)并没有解决问题。为了检查,我使用了conn.Execute(“SELECT @@ lc_time_names;”)并返回“en_US”。
另一个更新
在MySQL论坛上搜索相关问题,我发现另一个人抱怨同样的问题。一位MySQL大师说:
“这是着名的(臭名昭着的)服务器为CONCAT返回错误的类型 一个数字和一个字符串。必须使用(演员)形式 工作,司机无法分辨真实的类型。“
我不确定演员是什么或如何解决这个问题。
答案 0 :(得分:7)
愚蠢的服务器,数学用于数字。
CAST()
CAST(enum_col AS CHAR) - cast a value as a certain type
SELECT CONCAT( CAST(MONTHNAME(published) as char) , ' ' , CAST(YEAR(published)) as char) AS monthyear,
COUNT(*) AS total
FROM blog_articles
WHERE status = 'Online' AND Year(published) = 2012
GROUP BY CONCAT( MONTHNAME(published) , ' ' , YEAR(published))
DATE_FORMAT()
您也可以尝试DATE_FORMAT(YEAR(已发布),'%Y')函数而不是CAST。
答案 1 :(得分:6)
看起来你设置了lc_time_names"搞笑"。
尝试:
SET lc_time_names =' en_US';
在运行查询之前。
答案 2 :(得分:5)