我使用这个查询来生成一个博客存档菜单,如下所示:
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专家说:
“这是著名的(臭名昭著的)服务器返回错误的类型,用于连接数字和字符串。必须使用(cast)形式才能工作,驱动程序无法分辨真正的类型。”
我不确定cast是什么,也不知道如何解决这个问题。
发布于 2012-07-02 09:58:54
愚蠢的服务器,数学是用来写数字的。
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(published),'%Y')函数代替CAST。
发布于 2012-07-02 06:33:08
看起来你有一个lc_time_names设置“有趣”。
尝试:
设置lc_time_names = 'en_US';
在运行查询之前。
发布于 2012-07-02 06:33:04
https://stackoverflow.com/questions/11286108
复制相似问题