データベースZipCode
に値を保持するための正しい列の型は何ですか?PostgreSQL
9709 次
3 に答える
22
ここで提示されたアドバイスには強く同意しません。
- 受け入れられた回答は、数字ではないものを受け入れます。
- 質問は、郵便番号ではなく、郵便番号に関するものです。
- 郵便番号が間違っていて国際郵便番号を意味すると仮定すると、国際郵便番号に表示されてそのリストに表示されない文字があり、多くの国際郵便番号 (および米国国内郵便番号) は 10 文字を超える可能性があります。
- 郵便番号について彼らが尋ねた質問に実際に答えた場合、数字(およびおそらくハイフン)以外には対応できないはずです。
- 米国の郵便番号は最大 11 桁 (ダッシュ 2 つを数えると 13 文字) までの長さです。zip、zip+4、および zip+6 (プログラマーはこれを zip+4+2 と呼びます) 表記があります。最後は高層ビル、大学などで使用されます
- 米国の郵便番号は常に非負の整数であるため、テキスト データとして保存しないでください。これは、正規表現以外の問題が発生する可能性があります (システムを作成したことがある人に、郵便番号 00203 が一致しないことが判明したときのことを尋ねてください)。文字列表現を常に不必要に解析しているときに誤って取得した zip 203)
- 実際に国際郵便番号を追跡しているふりをしている場合、ここの短い文字シーケンス制限テキスト フィールドは、その仕事を開始することさえできません。「中国」という言葉が頭に浮かぶ。
私の意見:
- 実際に米国の郵便番号と国際郵便番号のどちらを扱っているかを判断する
- 米国の郵便番号を処理している場合は、それらを符号なし整数として追跡し、テキストで表す場合は左にゼロを埋め込んでください。(なぜこれが長期的にはより簡単になるのかを理解する必要がある場合は、UNIX タイムスタンプとローカル TZ 表現を考えてみてください。)
- 国際郵便番号を処理している場合は、それらを無制限の Unicode 文字列に格納し、それらが表す国に結び付け、チェック制約を使用して国ごとに検証します。この問題は、前もって思っているよりもはるかに困難です。国際住所は、地球上で最も標準化されていないものの一部です。日本の家番号がどのように機能するか、または英国の郵便番号 6 にギャップがある理由がわかるまでお待ちください。
于 2014-09-09T23:08:08.733 に答える
7
xxxxx-xxxxのようなものなので、varchar(10)
お勧めします。
domain
データベース内の値の構文を確認する場合は、郵便番号のタイプを作成できます。
CREATE DOMAIN zipcode varchar(10)
CONSTRAINT valid_zipcode
CHECK (VALUE ~ '[A-Z0-9-]+'); -- or a better regular expression
この正規表現を提案しているこのサイトを見ることができます。
(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$)
ただし、PostgreSQL
正規表現構文で機能することを確認する必要があります。
于 2011-03-24T14:51:03.793 に答える
-1
必要なzipの種類によって異なります。標準の5桁のみを保存する必要があることが確実な場合は、intを使用すると最もスペースを節約できます。
ただし、5+4 拡張を行う必要がある場合は、10 桁の文字フィールドが最適です。個人的には、将来、国際郵便番号を保存する必要が生じた場合に簡単になるので、10桁で、私が遭遇したほぼすべての可能な郵便番号形式をカバーすることをお勧めします.
于 2011-03-24T15:11:00.867 に答える