आपको इसे mySQL के बाहर करने की आवश्यकता होगी।
रूप CONVERT()
का उपयोग कर @Christian द्वारा दिखाए आप MySQL के अंदर स्ट्रिंग को सामान्य कर सकते हैं, लेकिन यह किसी भी अन्य गैर- ASCII वर्ण वर्तमान को नष्ट कर देगा:
Bürgercafé Römer
से
Burgercafz Romer
वर्ण हो जाएंगे सिरिलिक या चीनी जैसे अन्य चरित्र सेट पूरी तरह मिटा दिए जाएंगे।
आपका सबसे अच्छा सर्वश्रेष्ठ या तो उन सभी वर्णों को प्रतिस्थापित करना है जिन्हें आप प्रतिस्थापित करना चाहते हैं।
replace('Café Rouge','e','z')
replace('Café Rouge','é','z')
replace('Café Rouge','è','z')
ऐसा करने के लिए बिल्कुल आप क्या चाहते हैं, तो आप PHP जैसे एक प्रोग्रामिंग भाषा में हर स्ट्रिंग लोड करने के लिए होगा।
वहाँ, आप निम्न कर सकता है:
लोड डेटाबेस से स्ट्रिंग; सुनिश्चित करें कि यह UTF-8
स्प्लिट अपने पात्रों में स्ट्रिंग (multibyte पात्रों के बारे में पता होना - का उपयोग mb_split()
) है हर किरदार
के माध्यम से
वॉक iconv($character, "UTF-8", "ASCII//TRANSLIT");
- का उपयोग कर चरित्र सामान्यीकृत करें
यदि सामान्यीकृत वर्ण e
में परिणाम देते हैं, तो आप जानते हैं कि आपको इसे अपनी स्ट्रिंग में बदलना होगा।
परिवर्तित स्ट्रिंग को डेटाबेस में वापस लिखें।
हालांकि, यह एक छोटी सी चीज़ की तरह दिखने के लिए बहुत परेशानी की तरह दिखता है। क्या आपको वाकई यकीन है कि यह जरूरी है?
स्रोत
2013-07-08 08:03:30
मुझे यकीन नहीं है कि यह व्यवहार बदला जा सकता है - 'REPLACE() 'शायद बाइनरी तुलना कर रहा है। क्या यह आसानी से 'é' को प्रतिस्थापित करने का विकल्प नहीं है? –
आपको 'é' को बदलने की आवश्यकता क्यों है? आपको संभवतः नया कॉलम 'company_normalized' बनाना चाहिए जहां आप बिना किसी उच्चारण के मूल्य डालते हैं, सामान्यीकृत स्पेस इत्यादि के साथ ट्रिम किए जाते हैं और फिर आप सामान्यीकृत संस्करण का उपयोग करते हैं जहां यह सहायक है, और असली कंपनी का नाम अन्यथा ... – sasjaq
नहीं :(यह एक नहीं है विकल्प क्योंकि ऐसे कई वर्ण हो सकते हैं जो समस्या का कारण बनेंगे। साथ ही मैं अपनी तालिका को द्विआधारी संयोजन में नहीं बदल सकता क्योंकि हम वर्तमान में हर जगह केस असंवेदनशीलता का उपयोग कर रहे हैं और इसे बाइनरी में बदलना मतलब विभिन्न स्थानों पर परिवर्तन होगा। – Jeets