2016-04-14 7 views
0

So wie ich es verstehe, wird ein Int in SQL Server automatisch auf eine Länge von 4 Ziffern festgelegt. Ein bigint hat eine Standardlänge von 8. Es scheint, dass diese keine andere Länge haben kann. Was machen Sie dann, wenn Sie eine Spalte haben wollen, die nur Ziffern enthält und Sie brauchen eine Länge von 10?Int 10 in SQL Server

Ich habe bereits Float versucht und während es die 10 Ziffern speichert, tut es das in wissenschaftlicher Notation.

+3

"Wissenschaftliche Notation" ist keine Eigenschaft des 'float' Datentyp. Es ist eine Möglichkeit, es auf dem Bildschirm anzuzeigen. Außerdem scheinen Sie die Anzahl der Bytes, die zum Speichern eines binären Werts und der Anzahl der Ziffern in der textlichen Darstellung benötigt werden, zu verwechseln. – GSerg

+0

Das habe ich eigentlich gedacht. Es sollte bis zu zehn Ziffern umfassen. Aber ich bekomme einen arithmetischen Überlauffehler, wenn ich versuche, die Nummer hinzuzufügen. –

+1

@MarcelMarino 4 [signiert] Bytes ist auf 2.147.483.647 begrenzt. Sie können nicht alle 10-stelligen Basis-10-Werte mit einer 32-Bit-Nummer speichern. –

Antwort

1

int dauert 4 Bytes (-2^31 bis 2^31-1) und bitint nimmt 8 Bytes (-2^64 bis 2^64-1). Sie sind 32-Bit- bzw. 64-Bit-Ganzzahlen mit Vorzeichen.

Bitte beachten Sie die data type documentation.

Darüber hinaus sollten Sie vermeiden float und real, wenn Sie sie wirklich brauchen, da sie ungefähre Zahl Typen sind. Für Dezimalwerte werden decimal oder numeric bevorzugt.

Wenn Sie das Äquivalent eines „INT (10)“ wollen, dann sollten Sie decimal(10), die -9999999999 bis 9999999999. Beachten Sie unterstützen, dass diese mehr Speicherplatz als ein bigint (9 Byte) verwenden, und kann in sehr großen Maßstäben unterschiedlich arbeiten.

+0

Ich füge nur eine 10-stellige Telefonnummer hinzu. Die 4 Bytes sollten zehn Ziffern haben, aber ich bekomme einen arithmetischen Überlauffehler, wenn ich versuche, die Telefonnummer hinzuzufügen. –

+4

@MarcelMarino sollten Sie Varchar für Telefonnummern verwenden. Sie werden nicht Mathe gegen verschiedene Telefonnummern tun. –

+0

Wie sieht es mit automatisch inkrementierten Primärschlüsseln aus? Benutze immer noch varchar?Diese Datenbank könnte leicht zu den 7 Zahlen gelangen, soweit die Aufzeichnungen gehen. –

0

Welche Version von SQL Server verwenden Sie. Ich benutze SQL Server 2014. Es gibt einen Datentyp dezimal darin. Es macht was du willst. Wenn es in Ihrem SQL Server verfügbar ist, versuchen Sie es.

1

Sie mischen das Konzept einer lesbaren Nummer (die gemeinsamen Ziffern) mit seiner digitalen Darstellung (Bits).

INT das 4 Bytes nimmt (32 Bit) ist an ihrem Ende nicht "9999" ... Es gibt 4.294.967.295 verschiedene Werte möglich mit einem int ...

Von anderen Kommentaren Ich nehme, dass Sie möchten Telefonnummern speichern ...

Nehmen Sie dies als allgemeine Regel: Speichern Sie in numerischen Feldern Werte, die Sie in mathematischen Berechnungen verwenden möchten.

Würdest du jemals denken, dass eine Telefonnummer +2 oder eine Telefonnummer geteilt durch 4 einen Sinn ergibt?

Wie auch immer: Sehr oft werden Telefonnummern mit einer Art Trennzeichen gespeichert.

dies alles zusammen und Sie kommen zu dem Schluss: nein DECIMAL (10), kein INT, kein BIGINT aber VARCHAR (50) :-)