質問が述べているように、電話番号列に整数ではなく文字列として電話番号を保存することがベストプラクティスと見なされるのはなぜですか?
私はこの理由を理解していない。これを解消してください!
ありがとう!
電話番号は数字の文字列であり、整数ではありません。
例について考えてみましょう:
別のベースで電話番号を表現すると、意味がなくなります
2つの電話番号を加算または乗算したり、電話番号に対する数学演算を行ったりしても意味がありません。結果は別の電話番号ではありません(一致による場合を除く)
電話番号は、接続されたデバイスに「そのまま」入力することを目的としています。
電話番号の先頭にゼロが付いている場合があります。
市外局番の追加など、電話番号の操作は文字列操作です。
電話番号の文字列バージョンを保存すると、これが明確で明確になります。
履歴:古いパルスエンコードダイヤルシステムでは、電話番号の各桁のコードは、桁と同じパルス数(または「0」の場合は10パルス)として送信されていました。それが電話番号の一部を表すためにまだ数字を使用する理由かもしれません。 http://en.wikipedia.org/wiki/Pulse_dialing を参照してください
ニール・スレーターが言ったことは正しい。電話番号を数値として一貫して表現できないEdgeのケースがたくさんあることを付け加えます。
たとえば、次の数値を検討してください。
011-123-555-1212
+11-123-555-1212
+1 (112) 355-5121 x2
これらはすべて潜在的に有効な電話番号ですが、意味はまったく異なります。ただし、整数形式では、すべて111235551212
。
入力から表示するために数値を保存する場合は、文字列を使用する必要があります。
ただし、意味のある数値に対して数学演算を実行できないことは事実です。ハッシュセットでの番号の使用とインデックス作成には、文字列を使用するよりも高速です。したがって、数値のセットを保証または均質化できるため、それらはすべて一貫しているため、数値でのパフォーマンスが向上することがあります。
たとえば、Telcoの世界では、特定の顧客のコールの評価にはCLIでの検索が多く含まれており、この状況では整数で検索する方が高速で安価です。一般に、文字列はパフォーマンス上は優れていますが、パフォーマンスが重要な場合にのみ、膨大な数の番号に対して複数の検索を実行する必要があります。メモリの評価も高くなるため、これらのボリュームを扱う場合は、64ビットのintまたはuintを使用できる方が安価です。
たとえば、これらの電話番号を検討してください
099-1234-56789
または+91-8907-687665
。
この場合、phone_number
属性のタイプはinteger
であるため、これらの値を受け入れることはできません。これらのタイプの値を保持するには、string
にする必要があります。したがって、string
は常にinteger
これにはいくつかの理由があります。
+
、(
、-
など(例:+33(0)6 12 23 34)他の理由もあるかもしれませんが、それはすでにかなりの量だと思います:)