Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

Khi nào tôi nên sử dụng int unsign và ký int trong mysql? Điều gì tốt hơn để sử dụng hoặc đây chỉ là sự thích cá nhân? Bởi vì tôi đã thấy nó được sử dụng như thế này;

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

id INT(11) NOT NULL AUTO_INCREMENT

hỏi ngày 17 tháng 7 năm 2012 lúc 3:23Jul 17, 2012 at 3:23

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

2

UNSIGNED chỉ lưu trữ các số dương (hoặc không). Mặt khác, chữ ký có thể lưu trữ các số âm (tức là, có thể có một dấu hiệu âm).

Dưới đây là một bảng các phạm vi giá trị mỗi loại INTEGER có thể lưu trữ:

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

Nguồn: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED dao động từ 0 đến n, trong khi chữ ký dao động từ khoảng -n/2 đến n/2.

Trong trường hợp này, bạn có cột ID

id INT(11) NOT NULL AUTO_INCREMENT
0, vì vậy bạn sẽ không có tiêu cực. Do đó, sử dụng UNSIGNED. Nếu bạn không sử dụng UNSIGNED cho cột
id INT(11) NOT NULL AUTO_INCREMENT
0, giá trị tối đa có thể của bạn sẽ cao bằng một nửa (và một nửa âm của phạm vi giá trị sẽ không được sử dụng).

Đã trả lời ngày 17 tháng 7 năm 2012 lúc 3:25Jul 17, 2012 at 3:25

WiseGuywiseGuyWiseguy

20.2k8 Huy hiệu vàng65 Huy hiệu bạc79 Huy hiệu đồng8 gold badges65 silver badges79 bronze badges

2

Sử dụng UNSIGNED cho các số nguyên không âm.

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

Đã trả lời ngày 17 tháng 7 năm 2012 lúc 3:25Jul 17, 2012 at 3:25

WiseGuywiseGuy

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

20.2k8 Huy hiệu vàng65 Huy hiệu bạc79 Huy hiệu đồng

Sử dụng UNSIGNED cho các số nguyên không âm.5 gold badges52 silver badges77 bronze badges

Về cơ bản với UNSIGNED, bạn đang cho mình nhiều không gian cho số nguyên vì bạn chỉ định rõ ràng rằng bạn không cần số âm (thường là vì các giá trị bạn lưu trữ sẽ không bao giờ âm).Nov 21, 2015 at 16:14

NaeSrneczek

13.1k5 Huy hiệu vàng52 Huy hiệu bạc77 Huy hiệu đồng1 gold badge21 silver badges26 bronze badges

Đã trả lời ngày 21 tháng 11 năm 2015 lúc 16:14

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

SrneczeksrneczekOct 14, 2019 at 5:11

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

2.1131 Huy hiệu vàng21 Huy hiệu bạc26 Huy hiệu đồng

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

20.2k8 Huy hiệu vàng65 Huy hiệu bạc79 Huy hiệu đồng

Sử dụng UNSIGNED cho các số nguyên không âm.5 gold badges52 silver badges77 bronze badges

Về cơ bản với UNSIGNED, bạn đang cho mình nhiều không gian cho số nguyên vì bạn chỉ định rõ ràng rằng bạn không cần số âm (thường là vì các giá trị bạn lưu trữ sẽ không bao giờ âm).Jan 15, 2016 at 16:55

NaeKamal

13.1k5 Huy hiệu vàng52 Huy hiệu bạc77 Huy hiệu đồng4 bronze badges

Đã trả lời ngày 21 tháng 11 năm 2015 lúc 16:14vipin cp.

Srneczeksrneczek1 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  

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

2.1131 Huy hiệu vàng21 Huy hiệu bạc26 Huy hiệu đồng

Đối với giá trị số nguyên âm,

id INT(11) NOT NULL AUTO_INCREMENT
6 được sử dụng và cho giá trị số nguyên không âm, UNSIGNED được sử dụng. Nó luôn đề nghị sử dụng UNSIGNED cho ID làm khóa chính.8 gold badges31 silver badges46 bronze badges

Đã trả lời ngày 14 tháng 10 năm 2019 lúc 5:11Jul 18, 2017 at 12:29

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

Tôi nghĩ, UNSIGNED sẽ là lựa chọn tốt nhất để lưu trữ một cái gì đó như ________ 20 (ví dụ:

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  
1) giá trị theo định dạng vài phút hoặc vài giờ hoặc giây chắc chắn sẽ là một số không âm tính

Đã trả lời ngày 15 tháng 1 năm 2016 lúc 16:55Aug 17, 2016 at 5:55

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

KamalkamalVipin CP

594 huy hiệu đồng3 gold badges31 silver badges51 bronze badges

Tôi không đồng ý với Vipin CP.

Sự thật là bit đầu tiên được sử dụng để đại diện cho dấu hiệu. Nhưng 1 là cho âm và 0 là cho các giá trị dương. Hơn các giá trị âm được mã hóa theo cách khác nhau (bổ sung của hai). Ví dụ với Tinyint:Jul 18, 2017 at 12:36

Hướng dẫn mysql int unsigned vs signed - mysql int chưa ký so với đã ký

Juzraai

5.4908 Huy hiệu vàng31 Huy hiệu bạc46 Huy hiệu đồng

Đã trả lời ngày 18 tháng 7 năm 2017 lúc 12:29Mar 15 at 12:16

Một điều tôi muốn thêm vào

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  
2, đó là
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  
3,
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  
4 sẽ được sử dụng để đại diện cho
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  
5.
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  
6 Vì vậy, nếu ứng dụng của bạn chỉ chèn giá trị dương, nó sẽ chỉ định tốt hơn một cách không dấu.terryer

Đã trả lời ngày 17 tháng 8 năm 2016 lúc 5:551 silver badge2 bronze badges

Sự khác biệt giữa số nguyên đã ký và không dấu là gì?

Phạm vi đã ký là -2147483648 đến 2147483647. Phạm vi không dấu là 0 đến 4294967295. Loại này là một từ đồng nghĩa cho int. Một số nguyên lớn. The unsigned range is 0 to 4294967295 . This type is a synonym for INT . A large integer.

Sự khác biệt giữa một số nguyên đã ký và không dấu là gì?

Một số nguyên đã ký là một mốc dữ liệu 32 bit mã hóa một số nguyên trong phạm vi [-2147483648 đến 2147483647].Một số nguyên không dấu là một mốc dữ liệu 32 bit mã hóa một số nguyên không âm trong phạm vi [0 đến 4294967295].Số nguyên đã ký được thể hiện trong ký hiệu bổ sung TWOS.

INT không dấu có tốt hơn để sử dụng không?

Hướng dẫn kiểu Google C ++ khuyến nghị tránh các số nguyên không dấu ngoại trừ trong các tình huống chắc chắn yêu cầu nó (ví dụ: định dạng tệp thường lưu trữ kích thước trong UINT32_T hoặc UINT64_T - không có điểm nào trong việc lãng phí bit có chữ ký sẽ không bao giờ được sử dụng). (for example: file formats often store sizes in uint32_t or uint64_t -- no point in wasting a signedness bit that will never be used).

Không dấu nhanh hơn đã ký?

Đã ký hợp đồng so với số nguyên không dấu trong hầu hết các trường hợp, không có sự khác biệt về tốc độ giữa việc sử dụng số nguyên đã ký và không dấu.Nhưng có một vài trường hợp có vấn đề: phân chia theo không đổi: không dấu nhanh hơn được ký khi bạn chia một số nguyên với hằng số.Điều này cũng áp dụng cho nhà điều hành modulo %.there is no difference in speed between using signed and unsigned integers. But there are a few cases where it matters: Division by a constant: Unsigned is faster than signed when you divide an integer with a constant. This also applies to the modulo operator %.