When should I use UNSIGNED and SIGNED INT in MySQL ? What is better to use or this is just personal prefernce ? Because I\'ve seen it used like this;
id INT
Basically with UNSIGNED
, you're giving yourself twice as much space for the integer since you explicitly specify you don't need negative numbers (usually because values you store will never be negative).
For negative integer value, SIGNED
is used and for non-negative integer value, UNSIGNED
is used. It always suggested to use UNSIGNED
for id as a PRIMARY KEY.
UNSIGNED
only stores positive numbers (or zero). On the other hand, signed can store negative numbers (i.e., may have a negative sign).
Here's a table of the ranges of values each INTEGER
type can store:
Source: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
ranges from 0
to n
, while signed ranges from about -n/2
to n/2
.
In this case, you have an AUTO_INCREMENT
ID column, so you would not have negatives. Thus, use UNSIGNED
. If you do not use UNSIGNED
for the AUTO_INCREMENT
column, your maximum possible value will be half as high (and the negative half of the value range would go unused).
I think, UNSIGNED
would be the best option to store something like time_duration
(Eg: resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
) value in minutes or hours or seconds format which will definitely be a non-negative number
Use UNSIGNED
for non-negative integers.
I don't not agree with vipin cp.
The true is that first bit is used for represent the sign. But 1 is for negative and 0 is for positive values. More over negative values are coded in different way (two's complement). Example with TINYINT:
The sign bit
|
1000 0000b = -128d
...
1111 1101b = -3d
1111 1110b = -2d
1111 1111b = -1d
0000 0000b = 0d
0000 0001b = 1d
0000 0010b = 2d
...
0111 1111b = 127d