2012-07-01 12 views
18

estoy usando esta consulta para producir un menú de archivo del blog, así:SQL CONCAT - personajes animados - pero no estoy riendo

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

Resultado esperado:

January 2012  103 
February 2012  87 
March 2012   23 
April 2012   99 

Resultado real:

enter image description here

el recuento es correcta, pero en lugar de la oriental mental, Sho uld read:

May 2012  1 

¿Cómo puedo deshacerme de los divertidos personajes y tener el inglés en su lugar?

Cuando ejecuto esta consulta en phpMyAdmin, los caracteres están bien.

ACTUALIZACIÓN

He intentado correr conn.Execute ("SET lc_time_names = 'en_US';") y no resolvió el problema. Para verificar, utilicé conn.Execute ("SELECT @@ lc_time_names;") y me devolvió "en_US".

otra actualización

Buscando en los foros de MySQL para asuntos relacionados, me encontré con otro chico quejándose de la misma cuestión. Un gurú MySQL dicho:

"Este es el servidor famoso (infame) devuelve mal tipos de CONCAT de un número y una cadena Uno tiene que utilizar el formulario (molde) para que esto trabajo, el conductor. no puedo decir cuál es el tipo real ".

No sé qué es el molde o cómo solucionar este problema.

+12

+ 1 para el título: P – Oleksi

+2

+1 para "mental oriental" ': P'. – Bojangles

+1

¿Cuál es la consulta * más trivial * que reproduce el tema de los personajes "divertidos"? La consulta anterior es 1. la consulta mínima (que debe especificarse) o; 2. contiene un montón de SQL innecesarios ('GROUP BY',' CONCAT', 'MONTHNAME', etc.). –

Respuesta

7

Silly server, math is for numbers.

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() También puede intentar función en lugar de REPARTO DATE_FORMAT (AÑO (publicada), '% Y').

+0

BANG ON !! Woohoooo! – TheCarver

+0

Acabo de notar que no puse CAST() en el GROUP BY! – user1166147

+0

Está bien, lo noté y lo puse. Gracias. – TheCarver

5

Cambie su configuración al inglés. El siguiente es también SQL.

SET lc_time_names = 'en_US'; 

From here.

+0

Acabo de probar esto y no resolvió el problema. Para verificar, utilicé conn.Execute ("SELECT @@ lc_time_names;") y me devolvió "en_US". ¿Algunas ideas? – TheCarver

+0

@PaparazzoKid - Al iniciar 'mysqld', especifique la opción' --skip-character-set-client-handshake'. BTW por favor etiquete su pregunta con su sistema operativo. –

6

Parece que tiene un lc_time_names establecido como "divertido".

Probar:

lc_time_names SET = 'en_US';

antes de ejecutar la consulta.

+0

Haha "divertido". Acabo de probar esto y no resolví el problema desafortunadamente. Para verificar, utilicé conn.Execute ("SELECT @@ lc_time_names;") y me devolvió "en_US". ¿Algunas ideas? – TheCarver

+2

SELECT MONTHNAME ('2012-05-05') ¿exhibe el mismo efecto? – LSerni

Cuestiones relacionadas