3

léonフィールド内の文字列を含むすべてのデータを検索する場合はname、次のようなクエリを使用します。

SELECT * FROM `my_table` WHERE `name` REGEXP 'léon' 

このリクエストはOKです。

ここで、文字列léonorleonまたはを含むすべての行を取得する必要があるlèonため、次のことを試しました。

SELECT * FROM `my_table` WHERE `name` REGEXP 'l[éeè]on' 

このクエリは機能しません...エラーはありませんが、結果はありません。あなたはなにか考えはありますか?

4

2 に答える 2

0

ドキュメントから:

REGEXP および RLIKE 演算子はバイト単位で機能するため、マルチバイトに対して安全ではなく、マルチバイト文字セットで予期しない結果が生じる可能性があります。さらに、これらの演算子は文字をバイト値で比較するため、特定の照合で等しいと見なされたとしても、アクセント付き文字は等しいとは見なされない場合があります。

試してみることができるのは、このようにマルチバイト文字を処理することで、1 バイトまたは 2 バイトを処理します。たとえば、「ライオン」に一致するため、完全ではありませんが、近づく可能性があります。

REGEXP 'l.{1,2}on'

あなたに影響を与える可能性のあるもう1つのことは、MySQLでREGEXPが機能する方法です。最初と最後を指定していないため、最後に暗黙のワイルドカードがあることです。

REGEXP 'l[éeè]on' 

と同等です

REGEXP '^.*l[éeè]on.*$' 

これは、予想以上に一致している可能性があることを意味します。あなたの問題は私が言及した最初のシナリオのようです

于 2013-05-03T13:24:06.490 に答える