2016-07-17 5 views
2

たとえば、私はクラスの文字を作成したい、Araの数字[٩-٠] ..すべての数字の内容。
対応するUnicodeが[U+0660-U+0669]で、私が試したこの:私はこのエラーを取得RegExpを使用してMySQLでアラビア文字クラスを作成するには?

Select * FROM employees WHERE ID REGEXP [\u{0660}-\u{0669}]; 

#1064 - あなたのSQL構文でエラーが発生しています。近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルをチェック - 行1" で '[\ uの{0660} \ uの{0669}] LIMIT 0、25' の

+0

あなたはどんな味をお使いですか? – Shafizadeh

+1

また、コードがどのように機能しないかについて詳しく説明できますか?あなたは何を期待していましたか、実際何が起こったのですか?例外がある場合は、発生した行と例外の詳細を投稿してください。これらの詳細を入力または編集してください。 –

+1

正規表現をシングルクォートで文字列リテラルとして配置する必要があります。 – trincot

答えて

2

https://dev.mysql.com/doc/refman/5.7/en/regexp.html

を語ります

警告

バイト単位方式でREGEXPとRLIKEオペレーターの仕事なので、彼らは 安全なマルチバイトおよびマルチバイト 文字セットと予期せぬ結果を招くことがないのです。また、これらの事業者は 彼らのバイトで文字を比較します値とアクセント付きの文字たとえ与えられた照合がそれらを等しく扱っても、等価として と比較されない可能性があります。あなたが正規表現でÃを使用している場合、それは2バイト(16進数)C383として2バイトのUTF8コードを扱います、です

。これがあなたに「正しい」答えを与えるならば、それはデザインよりも運が多いでしょう。

これが行う作業:

mysql> SELECT '١' REGEXP '[٩-٠]'; 
+-----------------------+ 
| '١' REGEXP '[٩-٠]' | 
+-----------------------+ 
|      1 | 
+-----------------------+ 

しかし、それは単なる偶然です。正規表現は[x0-x9]のようなもので、xはD9バイト、0はA0、9はA9です。しかし、 『すべて』のアラビア語のため、その後の正規表現は、あなたが望んだものではありません「任意の文字x、または0x、または9の間で、ある

このかもしれない作品:REGEXP UNHEX('5BD82DDD5D')が、唯一の 『すべて』の理由DDからD8までの16進数で始まります(しかし、その範囲に他のものがあるかもしれません)。さらに、 "文字列にアラビア文字が含まれていますか?フレーズや文字のサブセットなど、もっと複雑なものには使用できません。

数字の範囲に戻る。 D9を確認するだけでは、パーセント記号、上付き文字などの文字が含まれるため、安全ではありません。これはかもしれない仕事:REGEXP UNHEX('D95BA02DA95D')

警告:私がこの答えで言ったことのほとんどはテストされていません。私は経験がない分野でソリューションを考案しています(REGEXPとutf8)。

+0

私はこの例をテストしました:CREATE TABLE namTst (ID INT PRIMARY KEY AUTO_INCREMENT、 Name VARCHAR(20)); INSERT INTO namTst (ID、名前) VALUES (NULL、 'スミス')、 (NULL、 'Ýrmada')、 (NULL、 'シュミット')、 (NULL、 'Clingon')、 ( NULL、 'Dalek')、 (NULL、 'Bush')、 (NULL、 'Burns')、 (NULL、 'Builth')、 (NULL、 'Thomas'); –

+0

SELECT * FROM 'namtst' WHERE名前REGEXP '[À-Õ]'; Ýが集合 '[À-Õ]'から外れているにもかかわらず、クエリーはcontainst ''Ýを含む行を返します。 –

+0

捕捉したい文字列をいくつか含めます;それらもスキップされます。 –

関連する問題