在PostgreSQL
數據庫中保存ZipCode
值的正確列類型是什麼?PostgreSQL數據庫中ZipCode的列類型?
回答
它類似於xxxxx-xxxx,所以推薦使用varchar(10)
。
如果要檢查數據庫中值的語法,可以爲郵政編碼創建domain
類型。
CREATE DOMAIN zipcode varchar(10)
CONSTRAINT valid_zipcode
CHECK (VALUE ~ '[A-Z0-9-]+'); -- or a better regular expression
你可以看看this網站,其中提出這個表達式:
(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$)
但是,你應該檢查它的工作原理爲PostgreSQL
正則表達式的語法。
它取決於你想要什麼類型的zip。如果你確定只需要存儲標準的5位數字,那麼使用int將是最節省空間的。
但是,如果您需要做5 + 4擴展,那麼10位數的字符字段是最好的。我個人認爲,如果您最終需要存儲國際郵政編碼,它確實使它更容易,10位數字涵蓋了我遇到的每種可能的郵政編碼格式。
郵政編碼可以具有前導零,因此對於郵政編碼使用「int」是一個壞主意。郵政編碼不是數字,它們是恰好由數字組成的字符串(有時是連字符)。 – 2011-03-24 17:16:31
int(5)用* ZEROFILL *屬性使5變成00005。 – 2011-07-21 04:18:18
我強烈反對這裏提出的建議。
- 接受的答案接受的東西不是數字。
- 問題是關於郵政編碼,而不是郵政編碼。
- 如果我們假設後是錯誤的,是指國際郵政編碼,還有出現在國際郵政代碼字符不會出現在該列表中,與衆多國際 - 也是美國國內 - 郵政代碼可以是十人物
- 如果我們真正回答他們提出的問題,關於郵政編碼,那麼就應該有任何東西,但數字沒有住宿(可以說是連字符)
- 美國郵政編碼可長達11個位數(13個字符計算兩個破折號) - 有一個zip,一個zip + 4和一個zip + 6(程序員稱爲zip + 4 + 2)符號;最後使用的摩天大樓,大學,等等
- 美國郵政編碼總是非負整數,因此不應該被存儲爲文本數據,這是受非佳能表示問題(問任何人誰是做了系統大約在那個時候,他們發現,他們的拉鍊00203不匹配的zip 203時不斷不必要解析字符串表示)
- 如果你假裝你實際上跟蹤國際的POST代碼,短的字符序列限制的文本字段,他們意外地得到了這裏甚至不開始做這項工作。想到「中國」這個詞。
我的opinon:
- 決定是否實際上是處理美國郵遞區號或國際
- 如果你正在處理美國郵遞區號,跟蹤他們爲無符號整數,和當代表它們的文本時,用零填充它們。 (想想unix時間戳和本地TZ表示,如果您需要了解爲什麼這將在更長的時間內更簡單。)
- 如果您要處理國際郵政編碼,請將它們存儲在無限制的Unicode字符串中,然後將它們綁定到國家/地區代表並驗證具有檢查限制的國家/地區。這個問題比聽起來要困難得多。國際地址是地球上一些最不標準化的東西。等一下,你會發現日本的房屋號碼是如何工作的,或者爲什麼英國的郵政6代碼有它的差距。
- 1. 確定PostgreSQL中的列數據類型
- 2. 在Rails 3.2.8中更改PostgreSQL數據庫中整個列的數據類型
- 3. ZipCode數據庫項目的問題
- 4. 數據類型與PostgreSQL的
- 5. 數據庫錯誤:「類型錯誤:無效的PostgreSQL類型:BIGINT」
- 6. 數據庫中的代碼列類型
- 7. 將通用java類型保存/加載到postgresql數據庫列
- 8. ZipCode數據庫web開發PHP,MYSQL
- 9. Active Record/Rails 3.2/PostgreSQL數據庫加入模型中屬性的數據類型
- 10. PostgreSQL中的幾何數據類型
- 11. PostgreSQL中URL的數據類型
- 12. PostgreSQL和C數據類型
- 13. 如何爲Postgresql中的列分配數據類型小數?
- 14. 如何在postgresql中更改數據庫的「字符類型」?
- 15. 比較MySQL,PostgreSQL和SQLite中的數據庫列類型? (交叉映射)
- 16. 如何在PostgreSQL中通過我的數據庫獲取列大小和類型
- 17. 在Bluehost共享Postgresql數據庫中創建PostgreSql的基本類型
- 18. 在PostgreSQL中找不到數據類型
- 19. 從文本更改列數據類型爲整數PostgreSQL中
- 20. 在PostgreSQL中選擇特定數據類型的列
- 21. postgresql,無法識別記錄數據類型中的列
- 22. 如何更改PostgreSQL表中列的數據類型?
- 23. 在PostgreSQL 9.1中更改列的數據類型
- 24. 如何獲取PostgreSQL中表的列名和數據類型?
- 25. Lazarus Pascal PostgreSQL數據庫的TSQLQuery參數類型
- 26. AdventureWorks數據庫中的數據類型
- 27. 的PostgreSQL到Java數據類型(Grails的)
- 28. 用於在postgresql數據庫中存儲erlang pids的數據類型是什麼?
- 29. PostgreSQL:小於smallint的數據類型?
- 30. 更改整個數據庫中列的數據類型 - MySQL
請記住,不同國家的zip coes看起來不一樣。如果那裏的OP架構有非美國代碼,比你不能使用這樣的模式。 – DrColossos 2011-03-24 15:16:02
我是PostgreSQL中的n00b,CREATE DOMAIN與CREATE TABLE相同, – 2011-03-24 15:35:56
不。您可以定義一個域,之後您可以使用「zipcode」而不是varchar(10)。你基本上定義了一個新的數據類型,它帶來了自己的驗證。 – Daniel 2011-03-24 16:59:41