https://dev.mysql.com/doc/refman/5.7/en/regexp.htmlは
を語ります
警告
バイト単位方式でREGEXPとRLIKEオペレーターの仕事なので、彼らは 安全なマルチバイトおよびマルチバイト 文字セットと予期せぬ結果を招くことがないのです。また、これらの事業者は 彼らのバイトで文字を比較します値とアクセント付きの文字たとえ与えられた照合がそれらを等しく扱っても、等価として と比較されない可能性があります。あなたが正規表現でÃ
を使用している場合、それは2バイト(16進数)C3
と83
として2バイトのUTF8コードを扱います、です
。これがあなたに「正しい」答えを与えるならば、それはデザインよりも運が多いでしょう。
これが行う作業:
mysql> SELECT '١' REGEXP '[٩-٠]';
+-----------------------+
| '١' REGEXP '[٩-٠]' |
+-----------------------+
| 1 |
+-----------------------+
しかし、それは単なる偶然です。正規表現は[x0-x9]
のようなもので、xはD9バイト、0はA0、9はA9です。しかし、 『すべて』のアラビア語のため、その後の正規表現は、あなたが望んだものではありません「任意の文字x
、または0
とx
、または9
の間で、ある
このかもしれない作品:REGEXP UNHEX('5BD82DDD5D')
が、唯一の 『すべて』の理由DDからD8までの16進数で始まります(しかし、その範囲に他のものがあるかもしれません)。さらに、 "文字列にアラビア文字が含まれていますか?フレーズや文字のサブセットなど、もっと複雑なものには使用できません。
数字の範囲に戻る。 D9
を確認するだけでは、パーセント記号、上付き文字などの文字が含まれるため、安全ではありません。これはかもしれない仕事:REGEXP UNHEX('D95BA02DA95D')
。
警告:私がこの答えで言ったことのほとんどはテストされていません。私は経験がない分野でソリューションを考案しています(REGEXPとutf8)。
あなたはどんな味をお使いですか? – Shafizadeh
また、コードがどのように機能しないかについて詳しく説明できますか?あなたは何を期待していましたか、実際何が起こったのですか?例外がある場合は、発生した行と例外の詳細を投稿してください。これらの詳細を入力または編集してください。 –
正規表現をシングルクォートで文字列リテラルとして配置する必要があります。 – trincot