2013-11-04 32 views
6

REGEX aracılığıyla MySQL veritabanından özel utf-8 karakterli veya içermeyen verileri almaya çalışıyorum.mysql regex utf-8 karakterleri

beni örnek üzerinde açıklayalım:

kullanıcı girerse o siréná girdiğinde sirena, siréna, šíreňá .. vb .. da geriye doğru çalışması gerekir gibi kelimeleri içeren satırları dönmelidir sirena gibi kelime aynı sonuç gerekir .. ben REGEX yoluyla aramak çalışıyorum

, benim sorgu şöyle görünür:

SELECT * FROM `content` WHERE `text` REGEXP '[sšŠ][iíÍ][rŕŔřŘ][eéÉěĚ][nňŇ][AaáÁäÄ0]' 
veritabanında kelime sirena ama kelime siréňa .. orada değilken

çünkü bir şey UTF-8 ve MySQL ile mi sadece

Çalışıyor? (mysql sütununun harmanlanması utf8_general_ci)

Teşekkür ederiz!

cevap

5

MySQL'in düzenli ifade kitaplığı utf-8'i desteklemiyor.

2007'den beri açık olan Bug #30241 Regular expression problems'a bakın. Sabitleştirilmeden önce kullandıkları normal ifade kitaplığını değiştirmek zorunda kalacaklar ve ne zaman ve ne zaman yapacaklarını hiç duymadım.

gördüğüm tek geçici çözüm belirli HEX dizeleri aramak içindir: Yorumunuz Re

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

:

Hayır, MySQL ile herhangi bir çözümün bilmiyorum.

Bu RDBMS, regular expression syntax öğelerinde UTF karakterleri için \u kodlarını desteklediğinden, PostgreSQL'e geçmeniz gerekebilir.

+0

hiçbir çözüm yoktur? – Maarty

+0

Bunu yanıtladığınızdan iki yıl geçti. Bu konuyla ilgili güncellemeler biliyor musunuz? – emisilva

+0

@emisilva, bu hatanın durumunu kontrol etmek için sağladığım bağlantıyı tıklayın. –

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])' 

Bana uyar ... şey gibi deneyin!

-3

Kullanım doğrudan mysql PCRE düzenli ifadeler için MySQL UDF deposundan lib_mysqludf_preg kütüphanesi

MySQL'in düzenli ifade kütüphanesi desteklemese de utf-8 MySQL UDF deposu göre utf-8 uyumlu normal ifadeler kullanabilirsiniz yeteneğine sahiptir PCRE düzenli ifadeler doğrudan mysql. benim dizeleri değişkenler ise

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

+0

Bu, teorik olarak, bu sorunun cevabının önemli kısımlarını içerecek şekilde [// meta.stackoverflow.com/q/8259] [tercih edilir] ve referans için bağlantı sağlayarak bu soruya cevap verebilir. –

+0

MySQL'in düzenli ifade kitaplığı utf-8'i desteklemese de, mysql UDF deposu, utf-8 uyumlu regex'i doğrudan mysql'de PCRE düzenli ifadelerine göre kullanma yeteneğine sahiptir. – Ghanshyam

+0

Bu kütüphaneyi kurmak için zamanımı boşa harcadım, desteklemiyor (doğru bir şekilde işlemek) utf-8'i desteklemiyor. SELECT PREG_RLIKE ('/ aeiou /', 'àèìòù'), SELECT 'aeiou' RLIKE 'àèìòù' gibi 0 döndürür. Bu nedenle, bu kütüphane MySQL'in utf8'i doğru şekilde işlememesi gerçeğine bir çözüm değildir. – matteo

İlgili konular