MySQL에서 UNSIGNED 및 SIGNED INT를 언제 사용해야합니까? 사용하는 것이 더 낫거나 이것은 단지 개인적인 선호입니까? 나는 이것을 이렇게 사용하는 것을 보았 기 때문에;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
과
id INT(11) NOT NULL AUTO_INCREMENT
MySQL에서 UNSIGNED 및 SIGNED INT를 언제 사용해야합니까? 사용하는 것이 더 낫거나 이것은 단지 개인적인 선호입니까? 나는 이것을 이렇게 사용하는 것을 보았 기 때문에;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
과
id INT(11) NOT NULL AUTO_INCREMENT
답변:
UNSIGNED
양수 (또는 0) 만 저장합니다. 반면에 signed는 음수를 저장할 수 있습니다 (즉, 음수 부호 가있을 수 있음 ).
다음은 각 INTEGER
유형이 저장할 수 있는 값 범위의 표입니다 .
출처 : http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
범위는에서 0
까지 n
이고 부호있는 범위는 약에서 -n/2
까지 n/2
입니다.
이 경우에는 AUTO_INCREMENT
ID 열이 있으므로 네거티브가 없습니다. 따라서 UNSIGNED
. 사용하지 않는 경우 UNSIGNED
에 대한 AUTO_INCREMENT
열, 최대 가능한 값은 높은 절반이 될 것이다 (그리고 값 범위의 부정적인 절반이되지 않는 갈 것입니다).
UNSIGNED
MySQL 전용 입니다. 즉,을 사용 하면 향후 다른 RDBMS 로의 마이그레이션이 더 복잡해 지거나 SQLAlchemy와 같은 표준 SQL을 대상으로하는 소프트웨어 라이브러리를 사용할 때 어려움이 발생할 수 있습니다. 이것이 답의 일부가되어야한다고 생각합니다. UNSIGNED
나는 vipin cp에 동의하지 않습니다 .
사실은 첫 번째 비트가 부호를 나타내는 데 사용된다는 것입니다. 그러나 1 은 음수이고 0 은 양수입니다. 더 많은 음수 값은 다른 방식으로 코딩됩니다 (2의 보수). 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
음의 정수 값의 경우 SIGNED
사용되며 음이 아닌 정수 값의 경우 UNSIGNED
사용됩니다. 항상 UNSIGNED
id를 PRIMARY KEY로 사용 하는 것이 좋습니다 .