2016-04-14 75 views
0

所以據我瞭解,SQL Server中的一個int會自動設置爲4位數的長度。一個bigint的默認長度是8,看起來這些長度不能做任何其他的長度,所以當你想要一個只包含數字的列並且你需要長度爲10時,你會做什麼?在SQL Server中的Int 10

我已經嘗試過使用float,雖然它會存儲10個數字,但它是以科學計數法表示的。

+3

「科學記數法」是不是'float'的屬性數據類型。這是一種在屏幕上顯示它的方法。此外,您似乎對存儲二進制值所需的字節數和其文本表示所具有的數字數量感到困惑。 – GSerg

+0

這就是我的想法,實際上。它應該佔用十位數。但是當我嘗試添加數字時,出現算術溢出錯誤。 –

+1

@MarcelMarino 4 [signed]字節數限制爲2,147,483,647。您不能使用32位數字來存儲所有10位數的base-10值。 –

回答

1

int需要4個字節(-2^31至2^31 - 1),和bitint需要8個字節(-2^64〜2^64 - 1)。它們分別是32位和64位有符號整數。請參考data type documentation

此外,您應該避免floatreal,除非您真的需要它們,因爲它們是近似數字類型。小數值優選爲decimalnumeric

如果你想要一個「INT(10)」,那麼你應該使用decimal(10),這將支持-9999999999到9999999999請記住,這將使用更多的磁盤空間比bigint(9個字節)的等價物,並且可能在非常大的範圍內表現不同。

+0

我只是添加了一個10位數的電話號碼。這4個字節應該佔用十位數,但當我嘗試添加電話號碼時,會出現算術溢出錯誤。 –

+4

@MarcelMarino你應該使用varchar作爲電話號碼。你不會對各種電話號碼進行數學運算。 –

+0

自動遞增主鍵的情況如何?仍然使用varchar?就數據記錄而言,該數據庫很容易達到7位數字。 –

0

您使用的是哪個版本的sql server。我正在使用SQL Server 2014.它有一個數據類型的小數。它做你想要的。如果它在你的sql服務器上可用,請嘗試它。

1

您正在將人類可讀數(通用數字)的概念與其數字表示(位)混合在一起。

INT這需要4個字節(32位)不處於其端部在「9999」 ...有可能4.294.967.295不同的值與一個int ...

從我採取其他註釋,該你想存儲電話號碼...

作爲一般規則:存儲在數字字段中的值,你想在數學計算中使用它。

你會認爲電話號碼+2或電話號碼除以4是否有意義嗎?

無論如何:很多時候phonenumbers與某種分隔符一起存儲。

把這一切放在一起,你得出的結論:無小數點(10),沒有INT,沒有BIGINT但VARCHAR(50):-)

相關問題