從乍看之下,似乎我有兩個基本選擇在數據庫表中存儲ZIP codes:使用整數列來存儲美國郵政編碼到數據庫是一個好主意嗎?
- 文本(可能是最常見的),即
char(5)
或varchar(9)
支持+4擴展 - 數字,即32位整數
如果我們假設沒有國際關注的話,兩者都能滿足數據的要求。過去我們通常只是走文字路線,但我想知道是否有人做相反的事情?剛剛從簡單的比較看起來整數方法有兩個明顯的優勢:
- 這是由於其性質的手段,自動僅限於NUMERICS(而無需驗證文本樣式可以存儲字母和這樣的不屬於,據我所知,永遠在郵政編碼有效)。這不意味着我們可以/將/應該放棄驗證用戶輸入正常,但!
- 佔用較少的空間,即4個字節(對於9位郵政編碼應該足夠多),而不是5或9個字節。
此外,它似乎不會傷害顯示輸出很多。在數字值上使用ToString()
是很簡單的,使用簡單的字符串操作爲+4擴展插入連字符或空格或任何其他字符,並使用字符串格式來恢復前導零。
有沒有什麼會阻止使用int
作爲美國郵政編碼的數據類型?
我可以發誓這是一個多次欺騙,但我有麻煩找到他們... – rmeador 2009-05-21 15:29:05
@rmeador:http://stackoverflow.com/questions/310540/best-practices-for-storing-postal-addresses-in-a-database-rdbms 是非常相似,而http:///stackoverflow.com/questions/747802/integer-vs-string-in-database 也涉及到這個話題。 – Shog9 2009-05-21 15:32:05
拍ToString on是一個等待發生的錯誤:如果00001變成郵編,該怎麼辦?然後你不能分辨10001和00001-0001之間。 – Mark 2009-05-21 15:52:32