通常情況下,INTEGER數據類型就足夠了,但在南非,ID號碼的長度爲13,而INTEGER數據類型只能達到10.我不喜歡使用VARCHAR這樣的字符,因爲它不會限制僅將ID號輸入到整數值。我只看到解決方案(其他使用VARCHAR)是使用DECIMAL。只有我看到的問題是,我無法像VARCHAR那樣限制最大大小,並且數據輸入可能包含','和'。'。任何意見?在SQL Server 2008中,我可以使用哪種數據類型作爲長度爲13位的ID號碼?
回答
只要使用BIGINT,範圍從-9223372036854775808到9223372036854775807,這對您的應用程序來說應該足夠了。
我確實使用VARCHAR
與CHECK
匹配的格式。如果有內部驗證,您甚至可以更加複雜,例如一個校驗碼。現在你已經爲具有字母字符的其他國家或者如果你需要處理前導零。
我不會使用整數,除非在字段上做某種算術是有意義的,這在這裏幾乎肯定是不正確的。
**從不**,將數字存儲在varchar列中。甚至沒有控制格式的檢查約束。 – 2013-05-06 17:18:32
@a_horse_with_no_name,你願意提供一個理由嗎?除了幾個字節之外,你在這裏使用數字是什麼?該ID不是真正的「數字」,您不會添加或平均它,它是一個只有數字的字符串。它很可能需要驗證。 – 2013-05-06 17:24:55
在字符列中存儲數字時,很多事情可能會出錯。想到排序(10會在2之前排序),你不能可靠地使用'<' or '>'(甚至是'=' - 想想'001'與'1')來比較它們。你會發現自己來回傳遞字符值。無需檢查限制,無論如何,這將成爲絕對的噩夢。*如果*這是一個「代碼」而不是一個數字ID,那麼使用varchar可能有意義,但我們不知道我在那裏同意你的意見。 – 2013-05-06 17:28:23
您也可以使用money,儘管看起來您只能在小數點後4位數字。 money
類型爲8個字節,範圍從-922,337,203,685,477.5808到922,337,203,685,477.5807。
declare @num as money
select @num = '1,300,000.45'
select @num
結果:
1300000.45
逗號和句號的分析可能是依賴於特定的文化設置,但我不知道那是肯定的。
假設你指的是南非的身份證號碼,其中according to Wikipedia總是有13位數字,那麼我會去CHAR(13)
與CHECK
約束(一個CLR user-defined data type也可能是一個選項)。
主要原因是'數字'不是一個數字,而是一個ID。您不能對數值進行加,減,乘等操作,因此使用數字數據類型沒有任何好處。此外,ID由具有其自身含義的組件組成,因此能夠解析它們可能很重要(並且在使用字符數據類型時更容易)。實際上,根據您使用這些數據的方式,您還可以添加存儲ID(DOB,序列,公民身份)各個組成部分的列,可以是計算列或實際列。這對於查詢和報告(以及索引)非常方便,特別是如果您將DOB轉換爲date
或datetime
列。
是的,你有三種方式去與這樣的ID。 1)假設你得到的每個身份證都是好的。 2)假設你得到的每個id可能不好,並驗證校驗和。 3)假設你得到的每個ID可能不好,並驗證組成部分。如果我有我的選擇,我從不認爲每個ID都是好的。我至少會驗證校驗和。 – 2013-05-06 20:05:10
- 1. 哪些數據類型使用SQL Server 2008作爲HASH值
- 2. 在SQL Server 2008中存儲長度爲10000的字符的數據類型
- 3. SQL Server 2008數據類型:我應該使用哪些數據類型?
- 4. 不能在C#中使用布爾作爲數據類型作爲替代的SQL Server位數據類型
- 5. SQL Server:檢索數據類型長度
- 6. SQL Server 2008數據類型
- 7. 我應該爲我的列使用哪種數據類型? [MySQL]
- 8. 將數字添加到長號碼(長度超過13位數)
- 9. Castle ActiveRecord - 我可以使用SQL Server 2008的「時間」數據類型嗎?
- 10. 我可以使用BigDecimal作爲hibernate hbm中的id類型嗎?
- 11. SQL 2008數據類型 - 使用哪些數據類型?
- 12. 我在哪裏可以找到列數據類型的Sql Server元數據?
- 13. 如何獲得特定列的數據類型,長度在SQL Server 2008
- 14. 使用SQL Server 2008日期數據類型以存儲年份
- 15. SQL Server 2008中:錯誤轉換數據類型爲nvarchar浮動
- 16. 使用哪種數據類型來存儲手機號碼
- 17. 在SQL Server 2008中使用set作爲參數來作用/ sproc?
- 18. 如何在SQL Server 2008中使用GUID數據類型?
- 19. 我可以在SQL Server 2005中使用SQL Server 2008管理工作室嗎?
- 20. Sql Server 2008 NVARCHAR長度-1
- 21. 將位數據類型轉換爲SQL Server中的VarChar
- 22. 我可以將64位SQL Server作爲32位運行嗎?
- 23. 我可以使用SQL Server 2008 R2 Express備份SQL Server 2005數據庫嗎
- 24. 哪種SQL數據類型可以容納鏈接
- 25. SQL Server 2008時間戳數據類型
- 26. YouTube爲他們的視頻使用了哪種類型的ID?
- 27. 將Unicode數據存儲在SQL Server 2008中XML數據類型
- 28. SQL Server 2008使用服務器ID作爲默認值
- 29. 是否可以在SQL Server 2008中使用存儲過程作爲子查詢?
- 30. 我可以使用ID作爲編號的div嗎?
他們的*固定長度是13還是僅13 *最大長度? – 2013-05-06 17:33:53