web-dev-qa-db-ja.com

電話番号は、電話番号を保存する能力がある文字列または数値タイプである必要がありますか?

10桁の携帯電話番号、つまり9999999999を保存します。数値または文字列データ型にする必要がありますか?これに対して計算操作や操作を行いたくない

どちらがメモリとパフォーマンスの点で優れていますか?

11
maverick

ITU-T勧告E.164 は、国コードに3桁、国ダイヤル計画内の電話番号に最大15桁が必要であることを示しています。

そして、多くの人が句読点を追加します。例えば:

+1.212.555.1212は北米の番号です。北米中心のアプリで(212)555-1212にレンダリングすることもできます。

32文字のテキストが世界中でうまくいくはずです。

数字を使用しないでください。ごめんなさい。私は:2つのことでした。

  • すべての電話番号が NANP準拠 10桁の番号であると仮定したため、会社のヨーロッパでのビジネスを失いました。
  • スプレッドシートのエクスポートにより、数値が科学表記法でレンダリングされました2.12555E+09それはSIRIが私に言っているのとほとんど同じくらい愚かです、あなたは2つのブリオン、1億2500万人から電話をしています...

電話帳番号は数値データ型ではありません。これを見てください: 電話番号についての偽りのプログラマー

29
O. Jones

電話番号はstringまたはintの制限を超えるため、longでなければなりません。したがって、これらのシナリオを処理するには、stringが常に優先されます。

3
Vikas Sardana

心に留めておくべきいくつかのこと:

一般に、計算を計画していない数値は、文字列の形式として保存する必要があります。番号をゼロから開始できるようにする必要がある場合(一部の電話番号がそうするように、あなたがそうするように)、これは不可欠です。

エルゴ、電話番号を巨大な整数として保存できる場合(または、いつ)(64ビット整数で保存できる場合)、そうすべきではありません。数値がゼロで始まるとすぐにデータが失われます。

電話番号を保存する場合、国コードは特別な種類の情報であることを忘れないでください。これを保存するときに、これを残りの番号から分離するのが最善です。このようにすると、国ごとに電話番号を簡単に照会できます。また、(取得するたびにではなく、保存する前に)番号の解析を複数回行う必要はありません。また、国番号と一緒に電話番号を保存する場合は、2つの異なる国からの2つの番号があるため、国コードを常に保存することを確認するために、事物を検証する必要があります一方が国コードを持ち、もう一方が持っていない場合、同一になる可能性があります。

また、句読点は表示方法であり、データの保存方法とは関係がないことも忘れないでください。いつでも希望する方法でデータを表示することを選択できます。どのような場合でも、希望する方法は多くの要因に依存します。たとえば、どの種類のデータを提示し、誰に提示し、場合によってはwhenデータを提示します。電話番号の場合、句読点なしで、文字列として番号を保存する必要があります。

国際電話番号の解析、フォーマット、検証については、Googleのライブラリをご覧になることをお勧めします( https://github.com/googlei18n/libphonenumber )。このライブラリに電話番号と国コードを入力すると、番号が有効で有効かどうか、所属する地域、番号の種類など、ライブラリに関する有用な情報が多数提供されます。 。

プロのヒントI:ユーザーに国コードを入力させるのではなく、番号が属する国を選択する方法を提供します。あなたにとっても、ユーザーにとっても良い。

Pro tip II:「北米中心のアプリ」や「ここに中心のアプリを挿入」など、特にアプリが利用可能な場合はめったにありませんウェブ上で。それは起こりますが、まれです。そのため、アプリを世界の一部よりもむしろ準備するほうが賢明でしょう。

2
erichjsonfosse