ISO 國家代碼看起來只是一個小欄位,實際上它同時牽涉三種不同形式的代碼、以及另一套行政區代碼的組合規則。搞混這些層次,會讓匯入、比對與顯示處處出錯。以下說明每種碼的用途、行政區代碼的組成方式,以及維護對照表時該注意什麼。
國家代碼為什麼不只一種?
同一個國家在國際標準裡有好幾種表示法,它們並不是新舊版本的關係,而是為了不同用途而並存。有的場合需要人看得懂、有的場合需要短到能塞進固定欄位、有的場合則希望即使語言與字型環境不同也不會被誤讀。
因此系統在設計時要問的不是「哪一種才對」,而是「這個欄位要用來做什麼」。只用於內部儲存與程式判斷的,和給人閱讀或印在文件上的,往往會選不同的形式。
最常見的錯誤是把兩種形式混在同一個欄位裡,導致同一個國家出現兩種值,統計時被算成兩個地區。
兩字母、三字母與數字碼分別用在哪
兩字母的形式最短,常見於網路協定、表單選單與需要節省空間的場合。三字母的形式辨識度較高,常用於文件、報表與需要避免縮寫歧義的地方。數字形式則避免了字母語言帶來的困擾,常用於統計與跨語言交換。
| 形式 | 長度 | 常見用途 |
|---|---|---|
| 兩字母 | 最短 | 表單、通訊協定、內部儲存 |
| 三字母 | 較長 | 文件、報表、對外呈現 |
| 數字 | 固定 | 統計、跨語言交換 |
三種形式都指向同一個國家,因此對照表必須同時保留三者,並且只認其中一種作為系統的內部主鍵。常見做法是用兩字母當主鍵,其餘兩種作為查詢用的別名,這樣既省空間,也不必在每次顯示時重新推導。
要注意的是,別名不能當成主鍵使用。一旦允許兩種形式都能寫入,資料庫裡就會出現同國兩值的狀況,而這種錯誤通常要等到產出報表時才會被發現。
數字形式還有一個容易被忽略的細節:它通常是固定長度,開頭若有零也必須保留。若這個值曾被當成整數處理,前導零消失後可能變成另一組完全有效的代碼,指向另一個國家,而這種錯誤不會有任何警告,只能靠人工發現。
ISO 3166-2 和當地行政區代碼有什麼不同?
行政區代碼的組成方式是把國家代碼與連字符、再加上當地的行政區識別碼串起來。也就是說,前半段是國家、後半段是該國內部的分區,兩者合起來才唯一。
它與各國自己發行的行政區代碼並不是同一件事。當地政府、郵政單位或統計部門各自可能有自己的編碼,長度與格式都不一樣,也不能互換使用。若你的系統同時要對接外部資料,就得分清楚手上這批代碼是哪一套。
另一個常見誤解是把它當成郵遞區號或電話區號使用。它標示的是行政層級的位置,與投遞路徑和電信路由都沒有關係。
同一個國家的內部分層也可能不只一層,例如先分大區、再分下級行政區。欄位設計時要先決定系統只存到哪一層,並在需要更細的層級時另開欄位,而不是把兩層串成一個字串。串起來之後,你既無法單獨查詢其中一層,也無法保證分隔符號不會與代碼本身衝突。
為什麼不能自己發明代碼?
臨時新增代碼看起來很方便,例如為了某個尚未被涵蓋的地區先編一個,或在代碼後面加上自訂後綴。問題是這些自造的值無法與外部交換,對方收到時只能猜測,而猜錯的時候往往不會有人發現。
更麻煩的是後續維護:自造代碼一旦寫進資料庫、報表與匯出檔,就變成事實上的內部標準,之後要換回正式代碼得同時修改所有依賴它的地方。
如果標準裡真的還沒有你要的項目,比較好的做法是保留一個明確的「未指定」或「其他」值,並在備註欄記錄原因,而不是造一個看起來像正式代碼的字串。真正需要新增代碼的情況,通常是標準本身更新了,那就等對照表跟著更新,而不是在應用層先跑一步。行政區層級的分工細節,可以對照國際地址格式裡的欄位說明。
儲存與顯示要分開處理
儲存時用穩定的代碼,顯示時才轉成當地語言的名稱,這是最不容易出錯的分工。若把兩者混在一起,介面翻譯與資料比對就會互相牽制:改一個顯示名稱,可能不小心改到用來比對的值。
同時也要考慮大小寫。有些場合習慣寫成大寫,有些允許小寫,而比對時若沒有統一,同一個國家就會被判成不同。統一在寫入時轉成大寫或小寫,並在顯示時再依需要調整,是比較省事的做法。
另外,對照表本身要能回答「這個代碼屬於哪個國家」。少了這層關係,行政區欄位就只能靠人工判斷是否與國家相符,而人工判斷在批次匯入時幾乎不會發生。
本站的隨機地址產生器在產生地址時,國家與行政區都取自同一份對照資料,因此不會出現代碼與名稱互相矛盾的情況,適合用來驗證你的欄位是否正確地分開儲存與顯示。這些產生的內容只供測試,不能投遞,也不代表任何人的實際所在地。想看某個國家實際的欄位組合,可以參考德國國家頁。
給開發者:對照表的維護方式
- 只用一種形式當內部主鍵,其餘形式當查詢別名。
- 對照表集中一份,不要在每個模組各寫一張小表。
- 保留「未指定」值,避免為了填滿欄位而自造代碼。
- 行政區代碼與國家代碼分開驗證,不要用同一條規則套用。
- 更新對照表時留下版本與日期,方便日後解釋資料為何改變。
- 數字形式的代碼當成文字處理,前導零不能省略。
測試資料裡的國家與行政區組合,也建議直接沿用這份對照表產生,而不是手寫。手寫的代碼很快就會與現實脫節,而且錯誤通常藏在很少被使用的那幾個值裡。
下一步
先檢查你的系統裡國家代碼有幾種寫法,把混用的地方收斂成一種主鍵;再確認行政區代碼有沒有被當成國家代碼的替代品使用。要接著設計跨國欄位的測試樣本,讀測試固定裝置裡的地址資料。