2013-11-04 7 views
6

मैं MySQL डेटाबेस से REGEX के माध्यम से या विशेष utf-8 अक्षरों के बिना डेटा प्राप्त करने का प्रयास कर रहा हूं।mysql regex utf-8 अक्षर

मुझे उदाहरण पर समझाता हूँ:

उपयोगकर्ता में प्रवेश करती है तो sirena की तरह शब्द यह पंक्तियाँ जो की तरह sirena, siréna, šíreňá .. और इतने पर .. भी यह पीछे की ओर जब वह siréná में प्रवेश करती है काम करना चाहिए शब्द शामिल लौटना चाहिए यह समान परिणाम चाहिए ..

मैं REGEX के माध्यम से यह खोज करने के लिए कोशिश कर रहा हूँ, मेरी क्वेरी इस तरह दिखता है:

SELECT * FROM `content` WHERE `text` REGEXP '[sšŠ][iíÍ][rŕŔřŘ][eéÉěĚ][nňŇ][AaáÁäÄ0]' 

यह काम करता है डेटाबेस में शब्द sirena है, लेकिन है नहीं है जब वहाँ शब्द siréňa ..

यह है क्योंकि UTF-8 और MySQL के साथ कुछ ही जब? (MySQL कॉलम का संयोजन utf8_general_ci)

धन्यवाद!

उत्तर

5

MySQL की नियमित अभिव्यक्ति लाइब्रेरी utf-8 का समर्थन नहीं करती है।

Bug #30241 Regular expression problems देखें, जो 2007 के बाद से खुला है। उन्हें नियमित रूप से अभिव्यक्ति लाइब्रेरी को बदलना होगा, जिसे पहले तय किया जा सकता है, और मुझे कोई घोषणा नहीं मिली है कि वे कब करेंगे या नहीं।

केवल वैकल्पिक हल मैंने देखा है विशिष्ट हेक्स तार के लिए खोज करने के लिए है:

mysql> SELECT * FROM `content` WHERE HEX(`text`) REGEXP 'C3A9C588'; 
+----------+ 
| text  | 
+----------+ 
| siréňa | 
+----------+ 

अपनी टिप्पणी पुन:

नहीं, मैं MySQL के साथ किसी भी समाधान के बारे में पता नहीं है।

आपको पोस्टग्रेएसक्यूएल पर स्विच करना पड़ सकता है, क्योंकि आरडीबीएमएस में यूटीएफ पात्रों के लिए \u कोड का समर्थन करता है।

+0

तो वहाँ कोई समाधान नहीं है अगर मेरे तार चर रहे हैं? – Maarty

+0

आपने इसका उत्तर देने के बाद दो साल बीत चुके हैं। क्या आप इस विषय के बारे में किसी भी अद्यतन के बारे में जानते हैं? – emisilva

+0

@emisilva, उस बग की स्थिति की जांच करने के लिए प्रदान किए गए लिंक पर क्लिक करें। –

0

कुछ तरह का प्रयास करें ... REGEXP '(a|b|[ab])'

SELECT * FROM `content` WHERE `text` REGEXP '(s|š|Š|[sšŠ])(i|í|Í|[iíÍ])(r|ŕ|Ŕ|ř|Ř|[rŕŔřŘ])(e|é|É|ě|Ě|[eéÉěĚ])(n|ň|Ň|[nňŇ])(A|a|á|Á|ä|Ä|0|[AaáÁäÄ0])' 

यह मेरे लिए काम करता है!

-3

उपयोग mysql में सीधे PCRE नियमित अभिव्यक्ति के लिए mysql यूडीएफ रिपोजिटरी से lib_mysqludf_preg पुस्तकालय

हालांकि MySQL के नियमित अभिव्यक्ति पुस्तकालय का समर्थन नहीं करता utf-8 mysql यूडीएफ भंडार अनुसार utf-8 संगत regex का उपयोग करने की क्षमता है पीसीआरई नियमित अभिव्यक्ति सीधे mysql में।

http://www.mysqludf.org/ https://github.com/mysqludf/lib_mysqludf_preg#readme

+0

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (// meta.stackoverflow.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

+0

हालांकि MySQL की नियमित अभिव्यक्ति लाइब्रेरी utf-8 का समर्थन नहीं करती है, MySQL UDF रिपॉजिटरी में पीसीआरई नियमित अभिव्यक्तियों के अनुसार सीधे mysql में utf-8 संगत रेगेक्स का उपयोग करने की क्षमता है। – Ghanshyam

+0

इस लाइब्रेरी को स्थापित करने में मेरा समय बर्बाद कर दिया गया है, यह पता चला है कि यह यूटीएफ -8 का समर्थन नहीं करता है (जिसका अर्थ है सही तरीके से हैंडल)। चुनें PREG_RLIKE ('/ aeiou /', 'àèìòù') 0 देता है, बस 'एईओ' RLIKE 'àèìòù' करता है। इसलिए, यह लाइब्रेरी इस तथ्य का कोई समाधान नहीं है कि MySQL सही ढंग से utf8 को संभाल नहीं करता है। – matteo

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