web-dev-qa-db-ja.com

電話番号を文字列と整数として保存するのが最適なのはなぜですか?

質問が述べているように、電話番号列に整数ではなく文字列として電話番号を保存することがベストプラクティスと見なされるのはなぜですか?

私はこの理由を理解していない。これを解消してください!

ありがとう!

45
user3399101

電話番号は数字の文字列であり、整数ではありません。

例について考えてみましょう:

  • 別のベースで電話番号を表現すると、意味がなくなります

  • 2つの電話番号を加算または乗算したり、電話番号に対する数学演算を行ったりしても意味がありません。結果は別の電話番号ではありません(一致による場合を除く)

  • 電話番号は、接続されたデバイスに「そのまま」入力することを目的としています。

  • 電話番号の先頭にゼロが付いている場合があります。

  • 市外局番の追加など、電話番号の操作は文字列操作です。

電話番号の文字列バージョンを保存すると、これが明確で明確になります。


履歴:古いパルスエンコードダイヤルシステムでは、電話番号の各桁のコードは、桁と同じパルス数(または「0」の場合は10パルス)として送信されていました。それが電話番号の一部を表すためにまだ数字を使用する理由かもしれません。 http://en.wikipedia.org/wiki/Pulse_dialing を参照してください

82
Neil Slater

ニール・スレーターが言ったことは正しい。電話番号を数値として一貫して表現できないEdgeのケースがたくさんあることを付け加えます。

たとえば、次の数値を検討してください。

011-123-555-1212
+11-123-555-1212
+1 (112) 355-5121 x2

これらはすべて潜在的に有効な電話番号ですが、意味はまったく異なります。ただし、整数形式では、すべて111235551212

8
Ed Cottrell

入力から表示するために数値を保存する場合は、文字列を使用する必要があります。

ただし、意味のある数値に対して数学演算を実行できないことは事実です。ハッシュセットでの番号の使用とインデックス作成には、文字列を使用するよりも高速です。したがって、数値のセットを保証または均質化できるため、それらはすべて一貫しているため、数値でのパフォーマンスが向上することがあります。

たとえば、Telcoの世界では、特定の顧客のコールの評価にはCLIでの検索が多く含まれており、この状況では整数で検索する方が高速で安価です。一般に、文字列はパフォーマンス上は優れていますが、パフォーマンスが重要な場合にのみ、膨大な数の番号に対して複数の検索を実行する必要があります。メモリの評価も高くなるため、これらのボリュームを扱う場合は、64ビットのintまたはuintを使用できる方が安価です。

6
Bovine

たとえば、これらの電話番号を検討してください

099-1234-56789または+91-8907-687665

この場合、phone_number属性のタイプはintegerであるため、これらの値を受け入れることはできません。これらのタイプの値を保持するには、stringにする必要があります。したがって、stringは常にinteger

5
Pavan

これにはいくつかの理由があります。

  • 電話番号は多くの場合「0」で始まります。整数はすべての先行「0」を削除します
  • 電話番号には特殊な文字を使用できます:+(-など(例:+33(0)6 12 23 34)
  • 電話で操作を実行することはできません。たとえば、電話を追加しても意味がありません。
  • 電話番号は国際化されている場合があります。つまり、人ごとに異なる形式であるため、整数では不可能です。

他の理由もあるかもしれませんが、それはすでにかなりの量だと思います:)

2