Подтвердить что ты не робот

SQL 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, символы в порядке.

UPDATE

Я только что попробовал запустить conn.Execute( "SET lc_time_names = 'en_US';" ) и не решил проблему. Чтобы проверить, я использовал conn.Execute( "SELECT @@lc_time_names;" ), и он вернул "en_US".

ДРУГОЕ ОБНОВЛЕНИЕ

Поиск на форумах MySQL по смежным вопросам, я нашел другого парня, скулящего по той же проблеме. Гуру-гуру сказал:

"Это знаменитый (позорный) сервер возвращает неправильные типы для CONCAT числа и строки. Для этого нужно использовать форму (cast) для работа, драйвер не может определить, что такое настоящий тип."

Я не уверен, что такое бросок или как исправить эту проблему.

4b9b3361

Ответ 1

Глупый сервер, математика для чисел.

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))

DATE_FORMAT() Вместо CAST вы также можете использовать функцию DATE_FORMAT (YEAR (опубликовано), '% Y').

Ответ 2

Похоже, что у вас есть lc_time_names, заданный "смешно".

Try:

SET lc_time_names = 'en_US';

перед запуском запроса.

Ответ 3

Переключите свой язык на английский. Ниже также SQL.

SET lc_time_names = 'en_US';

Отсюда.