sql >> データベース >  >> RDS >> Mysql

電話番号のMySQLデータベースとの闘い

    これは非常に奇妙です。私は過去15年間、この問題に何度も苦労してきました。一般に、市外局番、国番号、番号を別のフィールドに分ける構造を考え出しました。しかし、質問を読んでいると、別の解決策が浮かび上がりました。私の頭の中では、別のフィールドが必要ですが、あなたには適切ではないかもしれません。

    reverse_phone_numberと呼ばれる別のフィールドを作成し、これをDBエンジンによって自動的に入力して、ユーザーが検索文字列を逆に検索し、同様の文字列の末尾に%を付けたインデックス付き逆フィールドを使用すると、インデックス。

    DBエンジンによっては、ユーザー定義関数に基づいてインデックスを作成できる場合があります。これにより、追加のフィールドが不要になります。

    一部の国では、たとえば英国では、先行ゼロに問題がある可能性があります。英国の電話番号は、(市外局番)(電話番号)として表されます。例: 01634 511098、これが国際化されると、市外局番の先行ゼロが削除され、国際ダイヤルコード(+または00)と国番号(44)が追加されます。これにより、国際電話番号は+441634511098になります。 0163451109を検索するユーザーは、国際化された形式で入力された場合、電話番号を見つけることができません。この問題は、検索文字列から先行ゼロを削除することで解決できます。

    編集 Ollie Jonesからの提案に基づいて、ユーザーが入力した数値を格納してから、先行ゼロ、句読点、空白を数値から削除してから、反転して反転フィールドに格納する必要があります。次に、同じアルゴリズムを使用して、元に戻す前に検索文字列を削除し、レコードを見つけて、最初に入力した番号をユーザーに表示します。




    1. Djangoの新しいPostgres機能を楽しんでください

    2. RSUメソッドを使用したMySQLGaleraクラスターのオンラインスキーマアップグレード

    3. WHERE句を使用してSQLステートメントのすべてのレコードを選択することは可能ですか?

    4. ORA-12505、TNS:listenerは現在、connectdesで指定されたSIDを認識していません