Quand dois-je utiliser UNSIGNED et SIGNÉ INT dans MySQL?
Quand dois-je utiliser UNSIGNED et SIGNÉ INT dans MySQL ?
Quoi de mieux pour utiliser ou c'est juste personnel prefernce ?
Parce que je l'ai vu utilisé comme cela;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
et
id INT(11) NOT NULL AUTO_INCREMENT
- Négatif PK pas faire beaucoup de sens
- double possible de Ce n' "unsigned" dans MySQL dire et quand l'utiliser?
Vous devez vous connecter pour publier un commentaire.
UNSIGNED
seulement les magasins de nombres positifs (ou nuls). D'autre part, signé pouvez stocker des nombres négatifs (c'est à dire, peut avoir un effet négatif signe).Voici un tableau des plages de valeurs pour chaque
INTEGER
type de magasin:Source: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
varie de0
àn
, bien que signé varie de-n/2
àn/2
.Dans ce cas, vous avez un
AUTO_INCREMENT
colonne ID, de sorte que vous n'aurait pas négatifs. Ainsi, l'utilisationUNSIGNED
. Si vous n'utilisez pasUNSIGNED
pour laAUTO_INCREMENT
colonne, votre valeur maximum possible sera la moitié haute (et le négatif de la moitié de la valeur de la plage inutilisées).UNSIGNED
est spécifique à MySQL, et pas un standard SQL fonctionnalité. Cela signifie que l'utilisationUNSIGNED
peut faire une migration future vers un autre SGBDR plus compliqué ou vous causer des difficultés lors de l'utilisation de bibliothèques de logiciels ciblant le standard SQL comme SQLAlchemy. Je pense que cela devrait être une partie de la réponse.Utilisation
UNSIGNED
des entiers non négatifs.Essentiellement avec
UNSIGNED
, vous donnez vous-même deux fois plus d'espace pour l'entier depuis que vous spécifiez explicitement que vous n'avez pas besoin des nombres négatifs (généralement parce que les valeurs que vous magasin ne sera jamais négatif).Je ne suis pas d'accord avec vipin cp.
Le vrai, c'est que le premier bit est utilisé pour représenter le signe. Mais 1 est négative et 0 est pour les valeurs positives. Plus les valeurs négatives sont codées de manière différente (complément à deux). Exemple avec TINYINT:
Une chose que je voudrais ajouter
Dans un
signed int
, qui est ledefault value in mysql
,1 bit
sera utilisé pour représentersign
.-1 for negative and 0 for positive.
Donc, si votre application n'insérez qu'une valeur positive, il devrait mieux préciser non signé.
Si vous connaissez le type de numéros, vous allez au magasin, vous pouvez choisir en conséquence.
Dans ce cas, vos avez 'id' qui ne peut jamais être négatif. Ainsi, vous pouvez utiliser unsigned int.
Gamme de signé int: -n/2 +n/2
Gamme de unsigned int: 0 à n
Donc, vous avez deux fois le nombre de nombres positifs disponibles.
Choisir en conséquence.
Je pense,
UNSIGNED
serait la meilleure option pour stocker quelque chose commetime_duration
(par exemple:resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
) valeur en minutes ou en heures, voire en quelques secondes format qui sera certainement un nombre non négatif