2012-07-01 2 views
18

웃음 아니에요 :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

카운트가 올바른지 대신 정신 동양의, 그것은 쇼 uld 읽기 :

May 2012  1 

재미있는 문자를 없애고 대신 영어를 사용할 수 있습니까?

이 쿼리를 phpMyAdmin에서 실행할 때 문자는 정상입니다.

UPDATE 난 그냥 conn.Execute를 실행 시도

("lc_time_names의 = 'ko 페이지를'SET;")와 문제가 해결되지 않았다. 확인하려면 conn.Execute ("SELECT @@ lc_time_names;")를 사용하고 "en_US"를 반환했습니다.

관련 문제에 대한 MySQL의 포럼을 검색 ANOTHER UPDATE

, 저도 같은 문제에 대해 징징 다른 남자를 발견했다. MySQL의 전문가는 말했다 :

"이것은 유명한 (악명 높은) 서버가 수와 문자열의 CONCAT 에 대한 잘못된 유형을 반환 하나는 작업, 드라이버이의 (캐스트) 양식을 사용한다. 진짜 유형이 무엇인지 말할 수 없다. "

캐스트가 무엇인지 또는이 문제를 해결할 방법이 확실하지 않습니다.

+12

+ 1 : 제목 : P – Oleksi

+2

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

+1

"재미있는"문자를 재현하는 * 가장 간단한 * 쿼리는 무엇입니까? 위 쿼리는 1. 최소한의 쿼리 (지정해야 함) 또는; 2. 불필요한 SQL ('GROUP BY','CONCAT','MONTHNAME' 등)을 포함하고 있습니다. –

답변

7

바보 서버, 수학은 숫자입니다.

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 (출판), '%의 Y') 대신 CAST의 기능을 시도 할 수 있습니다.

+0

BANG ON !! 우우! – TheCarver

+0

방금 ​​GROUP BY에 CAST()를 넣지 않은 것으로 나타났습니다! – user1166147

+0

그건 괜찮아, 내가 알아 차 렸어. 고마워. 고마워. – TheCarver

5

로캘을 영어로 전환하십시오. 다음은 SQL입니다.

From here.

+0

나는 이것을 시도하고 문제를 해결하지 못했다. 확인하려면 conn.Execute ("SELECT @@ lc_time_names;")를 사용하고 "en_US"를 반환했습니다. 어떤 아이디어? – TheCarver

+0

@PaparazzoKid - mysqld를 시작할 때'--skip-character-set-client-handshake' 옵션을 지정하십시오. BTW 귀하의 질문에 운영 체제를 태그하십시오. –

6

"재미있는"lc_time_names 세트가있는 것 같습니다.

시도 :

SET의 lc_time_names =의 '의 ko 페이지';

쿼리를 실행하기 전에.

+0

하하 "재미있는". 나는 이것을 시도하고 불행하게도이 문제를 해결하지 못했다. 확인하려면 conn.Execute ("SELECT @@ lc_time_names;")를 사용하고 "en_US"를 반환했습니다. 어떤 아이디어? – TheCarver

+2

SELECT MONTHNAME ('2012-05-05')은 동일한 효과를 나타 냅니까? – LSerni