2008-08-27 111 views
124

我有一個簡單的網絡表單,將允許未經身份驗證的用戶輸入他們的信息,包括名稱。我給名稱字段50個字符的限制,以配合我的數據庫表字段是varchar(50),但後來我開始懷疑。什麼是「姓名」字段的合理長度限制?

使用類似文本列類型的東西更合適嗎?還是應該將名稱的長度限制在合理的範圍內?

我正在使用SQL Server 2005,以防萬一您的響應中出現問題。

編輯:我沒有看到this broader question關於類似的問題。

+2

需要注意的是,在這個全球化時代,varchar通常不是正確的數據類型,因此您應該使用nvarchar。 – Tao 2010-07-16 07:45:54

+0

@陶:因爲他使用MS SQL Server,我同意。但VARCHAR *是*其他SQL實現中的正確數據類型,它更好地支持UTF-8。 – dan04 2010-12-22 07:13:56

+1

檢查[這個相關的問題](http://stackoverflow.com/questions/20958/list-of-standard-lengths-for-database-fields#21012)關於這個問題的很多討論。 – 2008-08-27 15:43:29

回答

127

UK Government Data Standards Catalogue表明35個字符的每個給定的名字和姓氏,或70個字符的單場舉行的全名的。

+3

該鏈接需要更新截至2010年10月22日。我google搜索:網站:*。gov.uk命名「35個字符」,並找到此文檔https://www.justice.gov。uk/guidance/docs/electoral-reg-standards.pdf – 2010-10-22 20:01:31

6

如果它的全名在一個領域,我一般用128去 - 64/64的第一個和最後在不同的領域 - 你永遠都不會知道。

9

我通常會使用varchar(255)(255是MySQL中varchar類型的最大長度)。

+20

你還在你的圖形用戶界面和其他媒體上保留了255個字符的空間,其中第一個/最後一個名字被顯示? ;-) – AndrewBourgeois 2014-11-12 13:22:25

1

平均名字大約是6個字母。這留下了43個姓。 :)似乎你可以縮短它,如果你喜歡。

主要問題是您認爲您會有多少行?我不認爲varchar(50)會在你獲得數百萬行之前殺死你。

+5

如果varchar(20)列中的值在10到15個字符之間,並且在varchar(50)列中有相同的5000萬個值,那麼它們將佔用完全相同的空間。這是varchar的重點,與char相反。 – Tao 2010-07-16 07:43:34

+0

@Tao查看http://stackoverflow.com/questions/11132357/varchar20-and-varchar50-are-same – 2012-06-21 06:02:22

5

@Ian Nelson:我想知道其他人是否會在那裏看到問題。

假設你有拆分字段。總共有70個字符,名字35個,姓氏35個。但是,如果您只有一個字段,則會忽略分隔名字和姓氏的空格,因此只能將您改爲1個字符。當然,這只是「一個」字符,但是這可能會導致某人輸入全名和某人不一致。因此,我會將該建議更改爲「每個給定名稱和系列名稱爲35個字符,或者一個字段爲71個字符來保存全名」。

1

注意,許多文化有「第二姓氏」通常被稱爲姓氏。例如,如果你與西班牙人打交道,他們會欣賞將姓氏與「姓氏」分開。

最好的辦法是定義一個數據類型名稱組件,使用這些用於姓數據類型並根據語言環境調整。

2

你真正要問的是一個相關的,但實質上不同的問題:爲了使它們適合數據庫,我需要多少次截斷名稱?答案取決於不同長度名稱的頻率以及所選的最大長度。這種擔憂與對數據庫使用的資源的擔憂相平衡。考慮到varchar字段的不同最大長度之間有多麼小的開銷差異,我通常會犯錯,因爲永遠不會被迫截斷一個名稱並使字段與我敢於一樣大。

25

我知道我遲到了,但我會加上這個評論,因爲其他人可能會在未來出現類似的問題。

請注意根據區域設置調整列大小。首先,它會爲你設置一個維護噩夢,撇開人們遷徙的事實,並把他們的名字與他們一起。

例如,那些帶有這些姓氏的西班牙人可以搬到英語國家並生活在英語國家,並且可以合理預期他們的全名被使用。除了姓氏之外,俄​​羅斯人還有父權制,一些非洲人的姓名可能比大多數歐洲人的姓名長得多。

請考慮到潛在的行數,讓每列的寬度儘可能地合理。我使用40個字符作爲名字,其他名字和姓氏,並且從未發現任何問題。

0

取決於誰將使用您的數據庫,例如非洲名稱將使用varchar(20)來分隔姓氏和名字。然而它不同於國家,不同的國家,但爲了節省你的數據庫資源和內存,單獨的姓和名字段,並使用varchar(30)認爲這將起作用。

3

在英國,有一些政府標準成功處理了英國的大部分人口 - 護照辦公室,司機&車輛許可代理機構,契約調查辦公室和NHS。顯然,他們使用不同的標準。

改變你的名字由契約投票allows 300 characters;

對您的姓名長度沒有法定限制,但我們對您的全名限制爲300個字符(包括空格)。

NHS uses 70 characters for patient names

患者姓名
格式/長度:最大an70

的護照辦公室allows 30+30 first/last和駕駛執照(DVLA)爲30總。

請注意,其他組織將對他們將生成的文檔顯示的內容有他們自己的限制 - 對於HM Passport Office,您的姓名和姓氏的限制爲30個字符,DVLA的限制是總共30個字符爲您的全名。