Ich denke speziell an unsigniert int
.
Hier ist ein praktisches Beispiel: Was tun Sie, wenn Ihre Identitätsspalte maximal ist? Es ist möglich, entweder zu gehen BigInt
(8-Byte-Speicher statt 4) oder die Anwendung zu überarbeiten, um negative Ganzzahlen zu unterstützen, und sogar eigene Regeln zu erstellen, wie in dieser Antwort angegeben . Keine dieser Optionen ist optimal.
UInt
wäre eine ideale Lösung, aber SQL Server bietet sie nicht an (wo MySQL dies tut).
Ich verstehe, dass vorzeichenlose Datentypen nicht Teil des SQL-Standards (SQL-2003) sind, aber dennoch als Verschwendung erscheinen.
Was ist der Grund dafür, dass diese nicht enthalten sind (in SQL Server oder im Standard)?
sql
sql-server
sqldatatypes
unsigned-integer
Romhein
quelle
quelle
Antworten:
Wenn ich raten müsste, würde ich sagen, dass sie versuchen, eine Verbreitung von Typen zu vermeiden. Im Allgemeinen kann eine vorzeichenlose Ganzzahl nichts tun, was eine vorzeichenbehaftete Ganzzahl nicht kann. Wenn Sie eine Nummer zwischen 2147483648 und 4294967296 benötigen, sollten Sie wahrscheinlich eine 8-Byte-Ganzzahl verwenden, da die Nummer schließlich auch 4294967296 überschreitet.
quelle
ORDER BY ABS(Id)
), insbesondere wenn die Spalte ein gruppierter Primärschlüssel ist. Beispielsweise ist die Verwendung eines 32-Bit-Unix-Zeitstempels häufig eine praktische Möglichkeit, um 4 Byte einer Standard-SQL-Datumszeit zu sparen.Zu diesem Zweck können Sie -2,147,483,648 als Startwert verwenden.
quelle
Ich habe eine ähnliche Frage im Microsoft Office Dev Center gefunden.
Die Antwort von Jim Hogg (Programmmanager) enthält einige Vor- und Nachteile für das Hinzufügen von nicht signierten Ints. Der Hauptnachteil ist, dass die Regeln zum Implementieren impliziter Typkonvertierungen zu einem Albtraum werden, um richtig zu werden.
Die Anfrage wurde als "Won't Fix" geschlossen.
quelle
Sie unterstützen das Schlüsselwort SIGNED und UNSIGNED nicht, da sie nicht Standard sind. Im SQL-Standard sind alle numerischen Typen signiert.
UNSIGNED (und SIGNED, die Standardeinstellung) sind MySQL-Erweiterungen, die nützlich sein können, um höhere vorzeichenlose Zahlen in der gleichen Anzahl von Bytes zu speichern und negative Zahlen nicht zuzulassen.
quelle