Wann sollte ich UNSIGNED und SIGNED INT in MySQL verwenden? Was ist besser zu benutzen oder dies ist nur eine persönliche Präferenz? Weil ich gesehen habe, wie es so benutzt wurde;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
und
id INT(11) NOT NULL AUTO_INCREMENT
Antworten:
UNSIGNED
speichert nur positive Zahlen (oder Null). Andererseits kann ein Vorzeichen negative Zahlen speichern (dh ein negatives Vorzeichen haben ).Hier ist eine Tabelle der Wertebereiche, die jeder
INTEGER
Typ speichern kann:Quelle: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
reicht von0
bisn
, während signiert von ungefähr-n/2
bis reichtn/2
.In diesem Fall haben Sie eine
AUTO_INCREMENT
ID-Spalte, sodass Sie keine Negative haben würden. Verwenden Sie alsoUNSIGNED
. Wenn Sie nichtUNSIGNED
für dieAUTO_INCREMENT
Spalte verwenden, ist Ihr maximal möglicher Wert halb so hoch (und die negative Hälfte des Wertebereichs würde nicht verwendet).quelle
UNSIGNED
MySQL-spezifisch und keine Standard-SQL-Funktion ist. Dies bedeutet, dass die VerwendungUNSIGNED
eine zukünftige Migration auf ein anderes RDBMS komplizierter machen oder Ihnen Schwierigkeiten bereiten kann, wenn Sie Softwarebibliotheken verwenden, die auf Standard-SQL wie SQLAlchemy abzielen. Ich denke, das sollte ein Teil der Antwort sein.Verwendung
UNSIGNED
für nicht negative Ganzzahlen.quelle
Grundsätzlich
UNSIGNED
geben Sie sich doppelt so viel Platz für die Ganzzahl, da Sie explizit angeben, dass Sie keine negativen Zahlen benötigen (normalerweise, weil die von Ihnen gespeicherten Werte niemals negativ sind).quelle
Ich bin nicht einverstanden mit vipin cp .
Das wahre ist, dass das erste Bit zur Darstellung des Vorzeichens verwendet wird. Aber 1 ist für negative und 0 ist für positive Werte. Mehr als negative Werte werden unterschiedlich codiert (Zweierkomplement). Beispiel mit TINYINT:
quelle
Für den negativen ganzzahligen Wert
SIGNED
wird verwendet und für den nicht negativen ganzzahligen WertUNSIGNED
wird verwendet. Es wurde immer empfohlen,UNSIGNED
id als PRIMARY KEY zu verwenden.quelle
Eine Sache, die ich hinzufügen möchte, wird in a
signed int
, das istdefault value in mysql
,1 bit
verwendet, um darzustellensign
.-1 for negative and 0 for positive.
Wenn Ihre Anwendung also nur einen positiven Wert einfügt, sollte sie besser unsigned angeben.quelle
Wenn Sie die Art der Nummern kennen, die Sie speichern möchten, können Sie diese entsprechend auswählen. In diesem Fall haben Sie eine 'ID', die niemals negativ sein kann. Sie können also unsigned int verwenden. Bereich der vorzeichenbehafteten int: -n / 2 bis + n / 2 Bereich der vorzeichenlosen int: 0 bis n Sie haben also die doppelte Anzahl positiver Zahlen zur Verfügung. Wählen Sie entsprechend.
quelle
Ich denke,
UNSIGNED
wäre die beste Option, um so etwas wietime_duration
(zB :)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
Wert im Minuten-, Stunden- oder Sekundenformat zu speichern, was definitiv eine nicht negative Zahl sein wirdquelle