可能性のある複製:
電話番号と住所のmysqlデータ型
電話番号をDBに保存するためのベストプラクティスに関する提案はありますか?米国の電話番号を検討してください。
フォーマットを削除し、数字のみを保存する必要がありますか? 1つのフィールドのみを使用するか、国コード、市外局番、電話番号などに分割する必要がありますか?提案?
値をフォーマットで保存しないでください。書式設定は、ユーザー設定に応じてビューで実行する必要があります。
混合フォーマットで電話番号を検索することはほぼ不可能です。
この場合、フィールドに分割して整数として保存します。数値はテキストよりも高速であり、数値を分割してインデックスを付けると、あらゆる種類のクエリが高速に実行されます。
先頭の0は問題になる可能性がありますが、おそらくそうではありません。スウェーデンでは、すべての市外局番は0で始まり、国番号もダイヤルされると削除されます。しかし、0は実際には数字の一部ではなく、市外局番を追加していることを示すインジケータです。国コードについても同様で、00を追加して、郡コードを使用していると言います。
先頭の0は保存しないでください。必要に応じて追加する必要があります。データベースに00を格納し、+でのみ動作するサーバーを使用するとします。それらのアプリケーションでは、00を+に置き換える必要があります。
したがって、数字を数字として保存します。
数値をフォーマットせずにvarcharに保存することをお勧めします。次に、クライアント側で適切に数値を再フォーマットします。一部の文化では、電話番号の表記が異なることを好みます。フランスでは、01-22-33-44-55のような電話番号を書きます。
また、電話番号の対象国の別のフィールドを保存することを検討することもできます。これは、探している番号に基づいて把握するのが難しい場合があるためです。英国では11桁の長い数字を使用していますが、一部のアフリカ諸国では7桁の長い数字を使用しています。
そうは言っても、私は英国の電話会社で働いていたので、電話番号は英国か国際かを基にデータベースに保存していました。したがって、英国の電話番号は02081234123になり、国際電話番号は001800300300になります。
varchar、電話番号をさまざまな用途に合わせて異なる形式にしたい区切り文字を保存しないでください。そのため、(619)123-4567を6191234567として保存します。電話帳データを操作し、これがベストプラクティスであることがわかりました。
電話番号にはvarcharをお勧めします(電話番号には、保持することが重要な先頭の0が含まれていることがわかっているため)。
国コードと電話番号、つまり004477789787
の場合、CountryCode = 44と電話番号= 77789787を保存できます
ただし、それは非常にアプリケーション固有である可能性があります。たとえば、米国の番号のみを保存し、「特定の地域からすべての番号を取得する」などのクエリをすばやく実行する機能を保持する場合は、電話番号フィールドをさらに分割します(国コードフィールドをそのままドロップします)冗長)
これを行う一般的な正しい方法と間違った方法があるとは思わない。それは本当に要求に依存します。
これらをvarchar型の列に数値として保存することをお勧めします-「フィールド」ごとに1列(contryコードなど)。
この形式は、ユーザーと対話するときに適用する必要があります。これにより、たとえば形式の変更を簡単に把握でき、espに役立ちます。アプリケーションが国際化するとき...
私の視点から、以下が私の提案です。
受け入れたい文字で構成される拡張英数字として番号を保存し、それをvarchar(32)などに保存することを提案します。すべてのスペース、ダッシュなどを取り除きます。電話番号のFORMATTINGを別のフィールドに入力します(ロケールの設定から収集される場合があります)。拡張機能をサポートする場合は、別のフィールドに追加する必要があります。
私は間違いなくそれらを分割します。市外局番と国コードで番号を並べ替えるのは簡単です。ただし、分割しない場合でも、ある特定の形式で数値をDBに挿入するだけです。例えば1-555-555-1212クライアント側は、番号の再フォーマットを行わないことに感謝します。