我正在使用此查询来生成博客存档菜单,如下所示:
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 大师说:
"This is the famous (infamous) server returns wrong types for CONCAT of a number and a string. One has to use the (cast) form for this to work, the driver can't tell what the real type is."
我不确定类型转换是什么或如何解决此问题。
最佳答案
愚蠢的服务器,数学是数字。
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。
关于mysql - SQL CONCAT - 有趣的字符 - 但我没有笑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286108/