2012-07-01 14 views
18

Sto usando questa query per produrre un menu archivio di blog, in questo modo:SQL CONCAT - Divertenti - ma non sto ridendo

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

Risultato atteso:

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

Risultato effettivo:

enter image description here

il conteggio è corretto, ma al posto del orientale mentale, Sho leggi:

May 2012  1 

Come posso liberarmi dei personaggi buffi e avere invece l'inglese?

Quando si esegue questa query in phpMyAdmin, i caratteri vanno bene.

UPDATE

ho appena provato a fare funzionare conn.Execute ("SET lc_time_names = 'it';") e non ha risolto il problema. Per verificare, ho usato conn.Execute ("SELECT @@ lc_time_names;") e ha restituito "en_US".

un altro aggiornamento

Cercando sul forum di MySQL per le questioni connesse, ho trovato un altro ragazzo lamentarsi lo stesso problema. Un guru MySQL detto:

"Questo è il famoso (famigerato) server restituisce tipi sbagliati per CONCAT di un numero e una stringa Si deve utilizzare il modulo (getto) per questo a lavoro, il driver. non posso dire quale sia il vero tipo ".

Non so quale cast sia o come risolvere questo problema.

+12

+ 1 per titolo: P – Oleksi

+2

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

+1

Qual è la * query più banale * che riproduce il problema dei caratteri "divertenti"? La query precedente è 1. la query minima (che dovrebbe essere specificata) o; 2. contiene una serie di SQL non necessari ('GROUP BY',' CONCAT', 'MONTHNAME', ecc.). –

risposta

7

Server sciocco, la matematica è per i numeri.

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() Si potrebbe anche provare funzione invece di CAST DATE_FORMAT (YEAR (pubblicato), '% Y').

+0

BANG ON !! Woohoooo! – TheCarver

+0

Ho appena notato che non ho inserito CAST() in GROUP BY! – user1166147

+0

Va bene, l'ho notato e l'ho inserito. Grazie. – TheCarver

5

Quindi passare le impostazioni internazionali in inglese. Quanto segue è anche SQL.

SET lc_time_names = 'en_US'; 

From here.

+0

Ho appena provato questo e non ho risolto il problema. Per verificare, ho usato conn.Execute ("SELECT @@ lc_time_names;") e ha restituito "en_US". Qualche idea? – TheCarver

+0

@PaparazzoKid - Quando si avvia 'mysqld', specificare l'opzione' --skip-character-set-client-handshake'. Per favore, tagga la tua domanda con il tuo sistema operativo. –

6

Sembra che tu abbia un lc_time_names impostato "divertente".

Prova:

lc_time_names SET = 'it';

prima di eseguire la query.

+0

Haha "divertente". Ho appena provato questo e non ho risolto il problema, purtroppo. Per verificare, ho usato conn.Execute ("SELECT @@ lc_time_names;") e ha restituito "en_US". Qualche idea? – TheCarver

+2

SELECT MONTHNAME ('2012-05-05') mostra lo stesso effetto? – LSerni

Problemi correlati