2012-07-01 5 views
18

हँस नहीं कर रहा हूँ:एसक्यूएल 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

गिनती सही है लेकिन मानसिक प्राच्य के बजाय, यह sho उल पढ़ें:

May 2012  1 

मैं मज़ेदार पात्रों से कैसे छुटकारा पा सकता हूं और इसके बजाय अंग्रेजी कैसे प्राप्त कर सकता हूं?

जब मैं phpMyAdmin में यह क्वेरी चलाता हूं, तो वर्ण ठीक होते हैं।

अद्यतन

मैं सिर्फ conn.Execute चल कोशिश की है ("सेट lc_time_names = 'hi पर';") और समस्या का समाधान नहीं किया। जांचने के लिए, मैंने conn.Execute ("SELECT @@ lc_time_names;") का उपयोग किया और यह "en_US" लौटा।

कोई अन्य अपडेट

संबंधित मुद्दों के लिए MySQL मंचों पर सर्च कर रहे हैं, मैं एक और पुरुष एक ही मुद्दे के बारे में शिकायत नहीं मिली। एक MySQL गुरु ने कहा:

"यह प्रसिद्ध (कुख्यात) सर्वर एक संख्या है और एक स्ट्रिंग के concat के लिए गलत प्रकार रिटर्न है एक काम, चालक को इस बात के लिए (कच्चा) फार्म का उपयोग करना पड़ता है। यह नहीं बता सकता कि वास्तविक प्रकार क्या है। "

मुझे यकीन नहीं है कि इस समस्या को ठीक करने या कैसे ठीक किया जाए।

+12

शीर्षक के लिए +1: पी – Oleksi

+2

"मानसिक ओरिएंटल" के लिए +1: पी'। – Bojangles

+1

* सबसे छोटी * क्वेरी क्या है जो "मजाकिया" वर्णों के मुद्दे को पुन: उत्पन्न करती है? उपर्युक्त क्वेरी 1. या तो न्यूनतम क्वेरी (जिसे निर्दिष्ट किया जाना चाहिए) या; 2. अनावश्यक एसक्यूएल ('ग्रुप बाय ',' कंकैट ',' मॉन्थनाम', आदि) का एक गुच्छा शामिल है। –

उत्तर

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 (वर्ष (प्रकाशित), '% वाई') कास्ट के बजाय समारोह की कोशिश हो सकती है।

+0

बैंग ऑन !! Woohoooo! – TheCarver

+0

बस ध्यान दिया कि मैंने ग्रुप बाय में CAST() नहीं रखा है! – user1166147

+0

यह ठीक है, मैंने देखा और इसे अंदर डाल दिया। धन्यवाद। – TheCarver

5

तब अपने लोकेल को अंग्रेजी में स्विच करें। निम्नलिखित एसक्यूएल भी है।

SET lc_time_names = 'en_US'; 

From here

+0

मैंने अभी कोशिश की है और समस्या का समाधान नहीं किया है। जांचने के लिए, मैंने conn.Execute ("SELECT @@ lc_time_names;") का उपयोग किया और यह "en_US" लौटा। कोई विचार? – TheCarver

+0

@PaparazzoKid - 'mysqld' शुरू करते समय,' --skip-character-set-client-handshake' विकल्प निर्दिष्ट करें। बीटीडब्ल्यू कृपया अपने प्रश्न को अपने ऑपरेटिंग सिस्टम से टैग करें। –

6

ऐसा लगता है कि आपके पास lc_time_names सेट "मजाकिया" है।

प्रयास करें:

सेट lc_time_names = 'hi पर'; क्वेरी चलाने से पहले

+0

हाहा "हास्यास्पद"। मैंने अभी कोशिश की है और दुर्भाग्य से समस्या का समाधान नहीं किया है। जांचने के लिए, मैंने conn.Execute ("SELECT @@ lc_time_names;") का उपयोग किया और यह "en_US" लौटा। कोई विचार? – TheCarver

+2

चयन करें MONTHNAME ('2012-05-05') एक ही प्रभाव प्रदर्शित करता है? – LSerni

संबंधित मुद्दे