Quand dois-je utiliser UNSIGNED et SIGNED INT dans MySQL? Qu'est-ce qui est préférable d'utiliser ou c'est juste une préférence personnelle? Parce que je l'ai vu utilisé comme ça;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
et
id INT(11) NOT NULL AUTO_INCREMENT
Réponses:
UNSIGNED
ne stocke que des nombres positifs (ou zéro). D'autre part, signé peut stocker des nombres négatifs (c'est-à-dire, peut avoir un signe négatif ).Voici un tableau des plages de valeurs que chaque
INTEGER
type peut stocker:Source: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
varie de0
àn
, tandis que signé varie de environ-n/2
àn/2
.Dans ce cas, vous avez une
AUTO_INCREMENT
colonne ID, vous n'auriez donc pas de négatifs. Ainsi, utilisezUNSIGNED
. Si vous ne l'utilisez pasUNSIGNED
pour laAUTO_INCREMENT
colonne, votre valeur maximale possible sera deux fois moins élevée (et la moitié négative de la plage de valeurs ne sera pas utilisée).la source
UNSIGNED
c'est spécifique à MySQL et non une fonctionnalité SQL standard. Cela signifie que l'utilisationUNSIGNED
peut compliquer une future migration vers un autre SGBDR ou vous causer des difficultés lors de l'utilisation de bibliothèques de logiciels ciblant SQL standard telles que SQLAlchemy. Je pense que cela devrait faire partie de la réponse.À utiliser
UNSIGNED
pour les entiers non négatifs.la source
Fondamentalement
UNSIGNED
, vous vous donnez deux fois plus d'espace pour l'entier puisque vous spécifiez explicitement que vous n'avez pas besoin de nombres négatifs (généralement parce que les valeurs que vous stockez ne seront jamais négatives).la source
Je ne suis pas d'accord avec vipin cp .
Le vrai est que le premier bit est utilisé pour représenter le signe. Mais 1 est pour négatif et 0 pour les valeurs positives. De plus, les valeurs négatives sont codées de manière différente (complément à deux). Exemple avec TINYINT:
la source
Pour une valeur entière négative,
SIGNED
est utilisé et pour une valeur entière non négative,UNSIGNED
est utilisé. Il a toujours suggéré d'utiliserUNSIGNED
pour id comme clé primaire.la source
Une chose que je voudrais ajouter dans un
signed int
, qui est ledefault value in mysql
,1 bit
sera utilisée pour représentersign
.-1 for negative and 0 for positive.
Donc, si votre application n'insère qu'une valeur positive, il vaut mieux spécifier non signé.la source
Si vous connaissez le type de numéros que vous allez stocker, vous pouvez choisir en conséquence. Dans ce cas, vous avez un «identifiant» qui ne peut jamais être négatif. Vous pouvez donc utiliser des int non signés. Plage des entiers signés: -n / 2 à + n / 2 Plage des int non signés: 0 à n Vous avez donc deux fois le nombre de nombres positifs disponibles. Choisissez en conséquence.
la source
Je pense que ce
UNSIGNED
serait la meilleure option pour stocker quelque chose commetime_duration
(Par exemple:)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
valeur au format minutes ou heures ou secondes qui sera certainement un nombre non négatifla source