The*_*ver 18 mysql sql concat collation
我正在使用此查询来生成博客存档菜单,如下所示:
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))
Run Code Online (Sandbox Code Playgroud)
预期结果:
January 2012 103
February 2012 87
March 2012 23
April 2012 99
Run Code Online (Sandbox Code Playgroud)
实际结果:

计数是正确的,但不是精神东方,它应该是:
May 2012 1
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱有趣的角色而不是英语呢?
当我在phpMyAdmin中运行此查询时,字符很好.
UPDATE
我刚刚尝试运行conn.Execute("SET lc_time_names ='en_US';")并没有解决问题.为了检查,我使用了conn.Execute("SELECT @@ lc_time_names;")并返回"en_US".
另一个更新
在MySQL论坛上搜索相关问题,我发现另一个人抱怨同样的问题.MySQL大师说:
"这是着名的(臭名昭着的)服务器为数字和字符串的CONCAT返回错误的类型.必须使用(强制转换)表单才能使用,驱动程序无法判断真实类型是什么."
我不确定演员是什么或如何解决这个问题.
愚蠢的服务器,数学是数字.
CAST() CAST(enum_col AS CHAR) - 将值转换为特定类型
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))
Run Code Online (Sandbox Code Playgroud)
DATE_FORMAT() 您也可以尝试DATE_FORMAT(YEAR(已发布),'%Y')函数而不是CAST.
看起来你有一个lc_time_names设置为"有趣".
尝试:
SET lc_time_names ='en_US';
在运行查询之前.
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |