mysql - SQL CONCAT - 有趣的字符 - 但我没有笑

标签 mysql sql collation concat

我正在使用此查询来生成博客存档菜单,如下所示:

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

实际结果:

enter image description here

计数是正确的,但不是东方精神,它应该是:

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/

相关文章:

php - 如何从类内部的数组中获取值

sql - ORA-29273 : HTTP request failed intermittent error using the utl_http package

php - 具有一对多关系的表单

mysql - 我应该在二进制数据类型列 mysql 上使用哪个索引

php - 如何从 Paypal 取回数据以便相应地更改 MySQL 数据库?

php - Cakephp HABTM 需要多个连接

php - (Yii) SQLSTATE[42000] : Syntax error or access violation: 1064

java - Android SQLLiteDataBase 游标返回 0 行

sql-server - Kanji in Latin1_General_CI_AI 对照表

mysql - rake 数据库 :create - collation issues