で使うようにするといいでしょう整数カラムの保存米国郵便コードのデータベース?

StackOverflow https://stackoverflow.com/questions/893454

質問

から初めて見るとちょっとうれしい"という基本的な選択肢の保存 ZIPコード データベーステーブル:

  1. テキスト(おそらく最も一般的に必要となる char(5) または varchar(9) ポ+4拡張
  2. 数値は、32ビット整数

両方の要求には、データの場合を想定していない国です。過去に私が一般的だが、テキスト経路が破壊も修復もおもしろくな人なのかと思だから簡単に比較という整数型の方法は二つのメリット:

  • では、その自然、自動的に限り併記のみが検証なのテキストスタイルの店舗の文字などは、私の知る限りにおいて、今で有効な、ZIPコードとします。この いい/う/う逃検証のユーザー入力として通常のは、ちょっと素敵でした。
  • で省スペースは、4バイトはたっぷりのもの9桁の郵便コードの代わりに5~9バイトまでとなります。

ものと思われるのではなく、傷つく表示出力す。で簡単に打る ToString() 上の数値、単純な文字列操作を挿入するハイフンまたはスペースなどの+4の拡張子を使用文字列のフォーマットの復元先頭にゼロ.

何がう意欲をそぐような利用 int としてのデータ型おけZIPコード?

役に立ちましたか?

解決

数値のZIPコードがある - 誤解 - 小さな方法で。

番号はのの数値何かを意味する必要があります。 ZIPコードは、加算または減算または任意の数値演算に参加しません。 12309から12345のダウンタウンスケネクタディから私の近所までの距離を計算しません。

ZIPコードについて、誰が混乱しない、確か。しかし、他の数などの分野のために、それが混乱することができます。

ZIPコードは数字ではありませんので、

は、 - 彼らはただ制限アルファベットでコーディングすることが起こる - 私は、数値フィールドを避けることをお勧めします。 1バイトの節約はあまり価値がありません。そして、私はそのの意味がバイトよりも重要であること。

だと思います <時間>

編集

「先行ゼロについては...」私のポイントです。数値は、先行ゼロを持っていません。 ZIPコードの意味の先行ゼロの存在は、それらが数値じゃないことをさらに別の証拠である。

他のヒント

あなたは、米国以外の郵便番号を格納するつもりですか?カナダは一部の文字で6つの文字です。私は通常ちょうど10文字のフィールドを使用します。ディスク容量は、データモデルではありません手直しすること、安価である。

検証した文字列を使用してください。郵便番号は0で始めることができ、その数値は、適切なタイプではありません。また、これは国際郵便番号(8文字までで、例えば英国)にきちんと適用されます。そう場合、郵便番号がボトルネックであることを、あなたは10文字に制限はなく、あなたの<のhref =「http://en.wikipedia.org/wiki/Postal_Codes#Postal_codes_in_particular_countries」のrelをチェックアウトする可能性が=「nofollowをnoreferrer」 >ターゲットフォーマットは最初します。

ここで検証ををしています英国、米国とカナダのための正規表現ます。

<時間>

はい、あなたはパッドが先行ゼロを取り戻すためにすることができます。しかし、あなたは理論的にエラーが発生した場合には役立つかもしれない情報を捨てるです。誰かがデータベースに1235を見つけた場合、その元々01235で、または別の数字が見逃されている?

ベスト・プラクティスは、あなたが何を意味するかと言う必要がありますと言います。郵便番号コード、ではない数です。あなたはの郵便番号を分割/乗算/加算/減算href="https://stackoverflow.com/questions/290597/phone-number-columns-in-a-database">を

通常は、このような多くの郵便番号の種類が可能になるvarchar型のような非数値データ型を使用します。あなたが唯一の5桁の[XXXXX]または9桁の[XXXXX-XXXX]郵便番号を可能に死んでセットされている場合は、その後、(5)またはchar(10)文字を使用することができますが、私はそれをお勧めしません。 varchar型は、最も安全で健全な選択肢です。

編集:それはまた、あなたがフィールド上で数値計算を行う上で計画していない場合、あなたは、数値データ型を使用してはならないことに留意すべきです。郵便番号を追加またはそれに対して減算意味ではない数です。これは、一般的に数字で構成することを起こる単なる文字列であるので、あなたはそれのための数値データ型の使用を控える必要があります。

技術的な観点から、ここに上げ、いくつかのポイントはかなり些細です。私はの日々のもとにアドレスデータクレンジングと連携 - 世界中から特にクレンジングアドレスデータに。それは想像力の任意のストレッチにより、簡単な作業ではありません。それはコードを圧縮するために出たとき、あなたは<全角>それは「意味的に」適切ではないかもしれないが、は整数としてそれらを格納することができます。実際には、厳密には、の値の数値とみなされ、それを言えば、データが数値形式かどうかである、である。

ただし、数値型としてそれらを格納する非常に現実的な欠点は、システムがに高価な操作につながる先行ゼロを削除した場合は、データが誤って入力された場合は簡単に見る能力を失う(すなわち、値が欠落しています)、またはだろうということですそうでない場合は正しかった潜在的に無効な郵便番号を検証します。

これは、影響の一つは、事業の遅延がある場合、入力正しいデータにユーザーを強制的にも非常に困難です。ユーザーは、多くの場合、それはすぐに明白でなければ、正しいデータを入力するために忍耐を持っていません。正規表現を使用すると、ユーザーが適合していない値を入力すると、彼らはエラーを表示しているがあれば、正しいデータを保証する一つの方法である、彼らは完全にこの値を省略するか、適合しそれ以外は間違っているものを入力することもできます。 [カナダの郵便番号を使用して1つの例では、しばしばA0A 0A0が有効ではないですが、カナダの郵便番号のための正規表現に準拠した入力された参照のことです。多くの場合、これは郵便番号を提供することを余儀なくされているユーザーが入力されていますが、彼らはどちらか、それが何であるかを知らないか、そのすべてを持っていない正しいます。

1つの提案は、アドレスの残りの部分と比較した場合、郵便番号が正しいことを検証する手段としてエントリ全体を検証することです。それが正しくない場合は、アドレスの後、提供する別の有効な郵便番号を入力有効なデータに彼らのためにそれが容易になります。郵便番号は、住所の正しいが、街路番号は、その郵便番号のドメインの外にある場合同様に、その郵便番号/通りの組み合わせの代替街路番号を提供しています。

あなたはZIPコードデータに数学的な計算を実行するためにビジネス要件がない限り、

、INTを使用しても意味がありません。あなたは、エンジニアリング上だ。

この情報がお役に立てば幸い、

ビル

されていた方がよい。

  • きない数学関数zipコード
  • が含まれる場合があるためダッシュ
  • を開始することができると0
  • NULL値は時として解釈されるゼロの場合はスカラーの種類 のような整数(例えばきの輸出のデータをなんとか)
  • 郵便番号の場合でも、この番号は、指定面積 この名前の代わりに数量のもの
あなたが考えてみれば

ZIPコードは、実際にコード化された名前空間です。伝統的に数字が、また、ハイフンと資本手紙ます:

"10022-SHOE"

http://www.saksfifthavenue.com/main/10022-shoe.jsp

現実的には、ビジネスアプリケーションの多くは、それが有効である場合でも、このエッジケースをサポートする必要はありません。

整数はいいですが、それだけで、ほとんどの人がそれをしない理由である米国で動作します。通常、私はそうはvarchar(20)、またはを使用しています。おそらく任意のロケールのやり過ぎます。

あなたが米国のジッパーのための整数を使用した場合、

、あなたは万で主役を乗算し、4を追加したいと思います。データベース内の符号化は、入力検証とは何の関係もありません。あなたは常に有効かでないと入力を必要とすることができますが、ストレージは、あなたの要件やUSPSが変わると思いどのくらいの問題です。 (ヒント:あなたの要件はのでしょうの変更)

が最近学びました Rubyの理由の一つに、あなたがのように保存されている場合、先行ゼロで始まるいくつかの郵便番号があるので、これは避けたいだろうと整数-ます自動的進に変換されます。

ドキュメントからする

  

あなたは10進数、16進数、進またはバイナリ形式の数字を書くために、特別な接頭辞を使用することができます。 16進数は0Xの接頭辞を使用するための8進数が0または0°...

の接頭辞を使用するための小数のために、0Dの接頭辞を使用します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top