2013-04-05 68 views
6

我想在MySQL數據庫中存儲郵政編碼(在美國境內)。 保存空間是重中之重。這是使用VARCHAR的更好選擇 - 限制爲最大長度爲6位或使用INT或使用MEDIUM Int。郵政編碼不會用於任何計算。郵政編碼將用於插入(一次),更新(如果需要)和檢索 - 一次(但可以多次)。什麼是美國郵政編碼的最佳列類型?

哪個更適合在這裏使用VARCHAR或INT或MEDIUM IN MYSQL?請提出其他建議嗎?

+0

可能重複[在數據庫中使用整數列來存儲美國郵政編碼是個好主意嗎?](http://stackoverflow.com/questions/893454/is-it-a-good-idea-使用的安整數列換存儲-US-拉鍊碼-IN-A-databas) – Taryn 2013-04-05 21:25:23

回答

12

將郵政編碼作爲數字值存儲時存在一些問題。

  1. 郵政編碼有擴展名,這意味着它們可以是12345-6789。您不能在數字數據類型中存儲短劃線。
  2. 有很多以零開頭的郵政編碼,如果您將它作爲int存儲,您將失去前導零。
  3. 你不加/減等郵政編碼或使用數字功能。

我會存儲一個郵政編碼爲varchar(5)varchar(10)

作爲便箋,我不確定爲什麼你會選擇varchar(6),當標準郵政編碼爲5或10時,您是否有理由選擇不尋常的長度?

4

我通常使用MEDIUMINT(5) ZEROFILL代替5位數的郵政編碼。這保留了任何領先的0 s,並且它只使用3個字節,其中VARCHAR(5)將使用6。這假定您不需要擴展郵政編碼,其具有短劃線和4個額外數字。如果您決定使用文本類型,我會使用CHAR(5)而不是VARCHAR(5),因爲如果數據總是5個字符長,則更好。

3

郵政編碼總是5個字符,因此您需要一個CHAR數據類型,而不是VARCHAR。

選項有因此

CHAR(5) 

MEDIUMINT (5) UNSIGNED ZEROFILL 

第一取每郵政編碼5個字節。

第二個每個郵政編碼只需要3個字節。 ZEROFILL選項對於帶有前導零的郵政編碼是必需的。

因此,如果空間是您的首選,請使用MEDIUMINT。

1

我會建議,使用VARCHAR數據類型,因爲在一些國家,郵政編碼用作字母數字和其他地方作爲整數。所以我們不能使用整數用於全局使用。此外,郵政編碼可能從零開始,如001101,所以在這種情況下,如果我們採用數據類型整數,則導致零將丟失,因此我們無法傳遞實際的郵政編碼。

相關問題