数据库设计-电话号码长度
1.StackOverflow的建議
當我們設計電話號碼在數據庫中如何存儲的時候,如果只是存儲國內的電話號碼,這個長度只需要11即可,考慮未來可能會變長或者加上橫杠井號之類的內容,可以設置成varchar(15)。當然座機也可以包含在內。但是如果需要做到國際化,包含各個國家的電話號碼,還要包含區號,就比較復雜了,需要慎重考慮。
根據What's the longest possible worldwide phone number I should consider in SQL varchar(length) for phone中的討論,我們基本可以確定,如果存儲除核心號碼以外的其他內容,還是需要穩妥一點的。應該參照第一個答案:
2.關于核心號碼長度
另外,為什么核心號碼長度不會超過15,這個是參照一個規范的,這個規范叫:ITU-T recommendation E.164,這個名字有點怪,它還有一個名字叫:《The international public telecommunication numbering plan》。當然,這個規范是一種國際上的推薦,如果有一個地區就是不按照這個推薦的方式你也沒有辦法。 在這篇文檔中,有一個表格總結了號碼長度,如下:
3.總結
3.1.推薦值
如果不考慮很久遠的未來的情況。一般來說,varchar(20),就夠用(包括存儲特殊字符:+ -)。為什么是20呢?,參照下面的分層結構圖:
再參照國際長途如何撥號及常用國際字冠。
在國內打國際電話,最長需要:國際冠碼+國際區號+被叫城市區號+被叫電話。示例為:0011-86-768-6672211,其中的00只是從中國打去外國時,中國的國際字冠.假設我們存儲這個冗長的號碼為0011-86-768-6672211,其剛好為19位長,由于其核心號碼長度為12,若核心號碼達到了最長的15,則長度就到達了22。當然了,我們一般不存儲國際冠碼,所以一般這個串我們存儲成86-768-6672211,依舊,其核心號碼長度為12,若是達到了15,則長度為17。故20可以容納。
當然,如果我們需要發送短信,可以暫時不考慮座機的情況,直接考慮國際字冠—國際長途區號—手機號碼(移動電話)的格式,一般情況下,我們只存儲國際長途區號和手機號碼。即存儲國際長途區號—手機號碼(移動電話),此情況下,也只有16位長。故20也可以容納。
至于為何選用20,只是方便座機增加一個不長的分機號,例如:86-768-6672211234#10,不過一般這樣類型的座機電話不利于我們通知用戶,只是由此考慮,才定為20.如果只考慮智能機,目前來看16位足矣。
3.2.只存儲核心號碼
您可以使用char(15),只存儲核心號碼。但是這是有風險的,請看下面這張圖,我們的國際電報電話咨詢委員會制定規則是有一個演化圖的,這個規則可不是一成不變的:
3.3.更加穩妥的設計方案
若是您考慮到盡可能多的情況,甚至于一些不符合規范的情況。也許您還考慮到座機,后面可能出現冗長的分機號,需要存儲井號。我們可以使用穩妥的方案,即varchar(30)。如您非常悲觀,考慮到手機號碼將會很長,選用varchar(50)吧。
<div class="ad-wrap"><div id="blog-title-ad"> </div></div>總結
以上是生活随笔為你收集整理的数据库设计-电话号码长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 铁路售票系统_铁路资讯:复兴号动车、智能
- 下一篇: PyTorch 表情识别