दिलचस्प पोस्ट
EditText में setHintTextColor () विशेषाधिकार देने का प्रयास करते हुए उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए प्रवेश निषेध मैं विशेषाधिकार कैसे प्राप्त करूं? ओएस एक्स पर सी ++ लाइब्रेरी स्थापित करना fancybox2 / fancybox पृष्ठ को शीर्ष पर कूदने का कारण बनता है सी में स्थिर चर का आरम्भिकरण जावास्क्रिप्ट का उपयोग करते हुए भारतीय स्वरूप में एक नंबर प्रदर्शित करना इकट्ठा और कई गतिशील HTML इनपुटों के सबमिट किए गए मूल्यों को वापस सर्वलेट में सहेजें मैं एक निर्देशिका का पूंजीकरण बदलता हूं और गिट उस पर उठने नहीं लगता phpmyadmin स्वत: लॉगआउट समय फेसबुक की तरह बटन – अक्षम कैसे करें टिप्पणी पॉप अप? सी ++ में फ़ैक्ट्री विधि पैटर्न को कैसे लागू किया जाए IOS में किसी NSDate ऑब्जेक्ट में दिनांक स्ट्रिंग को कैसे पार्स करना है? आर में एक चरित्र वेक्टर से उद्धरण निकालें कोणीयर्स में प्रतिक्रिया हेडर कैसे पढ़ें? jQuery: बाहरी HTML ()

Collations MySQL त्रुटि का अवैध मिश्रण

बड़ी संख्या में डेटा प्रसंस्करण करते समय मुझे यह अजीब त्रुटि मिल रही है …

Error Number: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' SELECT COUNT(*) as num from keywords WHERE campaignId='12' AND LCASE(keyword)='hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€' 

इसके समाधान के लिए क्या किया जा सकता है? क्या मैं किसी स्ट्रिंग से बच सकता हूं, इसलिए यह त्रुटि नहीं होती, या मुझे अपनी मेज एन्कोडिंग को किसी तरह बदलने की आवश्यकता है, और यदि हां, तो मुझे इसे किस प्रकार बदलना चाहिए?

वेब के समाधान से एकत्रित समाधान "Collations MySQL त्रुटि का अवैध मिश्रण"

 SET collation_connection = 'utf8_general_ci'; 

तो आपके डेटाबेस के लिए

 ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

MySQL कभी कभी कोई समझदार कारण के लिए स्वीडिश sneaks।

आपको अपनी तालिका एन्कोडिंग और कनेक्शन एन्कोडिंग दोनों को UTF-8 सेट करना चाहिए:

 ALTER TABLE keywords CHARACTER SET UTF8; -- run once 

तथा

 SET NAMES 'UTF8'; SET CHARACTER SET 'UTF8'; 

मेरी मेज मूलतः CHARSET = latin1 के साथ बनाई गई थी यूफ़टी 8 में तालिका रूपांतरण के बाद कुछ कॉलम परिवर्तित नहीं हुए थे, हालांकि यह वास्तव में स्पष्ट नहीं था। आप अपने SHOW CREATE TABLE my_table; लिए चला सकते हैं SHOW CREATE TABLE my_table; और देखें कि कौन सा स्तंभ परिवर्तित नहीं किया गया था या नीचे दिए गए प्रश्न के साथ समस्याग्रस्त कॉलम पर गलत वर्ण सेट को ठीक नहीं किया गया है (अपनी आवश्यकताओं के अनुसार वक्रार लंबाई और चार्सेट और कोलेटल बदलें):

  ALTER TABLE `my_table` CHANGE `my_column` `my_column` VARCHAR(10) CHARSET utf8 COLLATE utf8_general_ci NULL; 

सामान्य रूप से तालिका मिलान को बदलने का सबसे अच्छा तरीका है। हालांकि मेरे पास एक पुराना आवेदन है और परिणाम का अनुमान लगाने में वास्तव में सक्षम नहीं हैं कि क्या इसके दुष्प्रभाव हैं इसलिए मैंने किसी स्ट्रिंग को किसी अन्य प्रारूप में कनवर्ट करने की कोशिश की जो कि collation समस्या का समाधान करती है। मुझे क्या काम मिल रहा है स्ट्रिंग को उसके अक्षर के हेक्साडेसिमल प्रस्तुति में स्ट्रिंग में परिवर्तित करके करना है। डेटाबेस पर HEX(column). साथ किया जाता है PHP के लिए आप इस फ़ंक्शन का उपयोग कर सकते हैं:

 public static function strToHex($string) { $hex = ''; for ($i=0; $i<strlen($string); $i++){ $ord = ord($string[$i]); $hexCode = dechex($ord); $hex .= substr('0'.$hexCode, -2); } return strToUpper($hex); } 

डेटाबेस क्वेरी करते समय, आपकी मूल यूटीएफ 8 स्ट्रिंग को पहले आईएसओ स्ट्रिंग में परिवर्तित किया जाना चाहिए (जैसे PHP में utf8_decode() में) डीबी में उपयोग करने से पहले। कॉलेशन प्रकार के कारण डेटाबेस में यूटीएफ 8 अक्षर नहीं हो सकते हैं, इसलिए तुलनात्मक घटना को काम करना चाहिए, हालांकि यह मूल स्ट्रिंग बदलता है (जो कि यूटीएफ 8 वर्णों को परिवर्तित करने के लिए आईएसओ वर्णसेट परिणाम में मौजूद नहीं है? या इन्हें पूरी तरह से हटा दिया गया है)। बस यह सुनिश्चित करें कि जब आप डेटाबेस में डेटा लिखते हैं, तो आप उसी यूटीएफ 8 को आईएसओ रूपांतरण के लिए उपयोग करते हैं।