Những gì được ký và không được ký trong mysql?

Tất cả các loại số nguyên có thể có thuộc tính tùy chọn (không chuẩn) UNSIGNED. Loại không dấu có thể được sử dụng để chỉ cho phép các số không âm trong một cột hoặc khi bạn cần một phạm vi số trên lớn hơn cho cột. Ví dụ: nếu một cột INT KHÔNG ĐƯỢC KÝ, kích thước của phạm vi của cột là như nhau nhưng các điểm cuối của nó thay đổi từ -2147483648 và 2147483647 lên thành 0 và 4294967295

Khi nào sử dụng kiểu dữ liệu UNSIGNED?

Nếu trường của bạn sẽ không bao giờ lưu trữ các giá trị âm, thì tốt nhất bạn nên sử dụng UNSIGNED, điều đó sẽ cung cấp cho bạn chỉ mục nhanh hơn và nhiều phạm vi hơn

Khi nào nên sử dụng loại dữ liệu ĐÃ KÝ?

Nếu bạn cần lưu trữ âm thì hãy sử dụng có dấu, nhưng hãy nhớ rằng phạm vi số của bạn bây giờ là một nửa

 

Ghi chú. Lỗi phổ biến mà mọi người mắc phải là lưu trữ số chính ( tự động tăng ) như đã ký. Điều đó có nghĩa là bạn đã giảm phạm vi số của mình ngay cả khi bạn sẽ không bao giờ sử dụng số âm làm khóa chính của mình

MySQL hỗ trợ các kiểu số nguyên tiêu chuẩn của SQL là INTEGER (hoặc INT) và SMALLINT. Là một phần mở rộng của tiêu chuẩn, MySQL cũng hỗ trợ các kiểu số nguyênTINYINT, MEDIUMINTBIGINT. Bảng sau đây hiển thị dung lượng lưu trữ và phạm vi cần thiết cho từng loại số nguyên

TypeStorageMinimum ValueMaximum Value(Bytes)(Signed/Unsigned)(Signed/Unsigned)TINYINT1-1281270INT0SMALLINT2INT2INT30INT5MEDIUMINT3INT7INT80SMALLINT0INT4SMALLINT2SMALLINT30SMALLINT5BIGINT8SMALLINT7SMALLINT80TINYINT0

Yêu cầu thể hiện các giá trị số với nguồn lực hạn chế đã thúc đẩy việc tạo ra các ký hiệu so với. số không dấu. Khi sử dụng 8 bit, chỉ có 256 kết hợp có thể. Bất kỳ giá trị nào trong khoảng từ 0 đến 255 được coi là số không dấu. Mặt khác, có một số có dấu nghĩa là bạn đã mất một chút để thể hiện dấu hiệu. Với 7 bit, bạn chỉ có thể có 128 hoán vị. Do đó, phạm vi số có dấu 8 bit là -128 đến 127. Sử dụng các số không dấu là cách tốt nhất nếu bạn có nguồn lực hạn chế, đó là trường hợp trong những ngày đầu của máy tính

Số nguyên không dấu nằm trong khoảng từ 0 đến 4.294.967.295 hoặc khoảng 4 tỷ số nguyên 32 bit. Phiên bản đã ký dao động từ –2,147,483,648 đến 2,147,483,647, hoặc khoảng -2 tỷ đến +2 tỷ. Phạm vi giống nhau, nhưng các giá trị được dịch chuyển trên trục số

Sự khác biệt giữa Đã ký và Chưa ký trong MySQL

Giá trị có dấu - Các biến có chữ số có dấu có thể lưu trữ số 0, số dương và số âm
Giá trị không dấu - Các biến có chữ số không dấu chỉ có thể lưu trữ 0 và số dương

Bảng Phạm vi giá trị Mỗi loại số nguyên có thể lưu trữ Tham khảo

TypeStorage (Bytes)Min signed valueMax signed valueMin unsigned valueMax unsigned valueTINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-83886088388607016777215INT4-2147483648214748364704924967295BIGINT8-9,223,372,036,854,775,8089,223,372,036,854,775,807018,446,744,073,709,551,615

Thí dụ

  • Để chỉ định cột id không dấu

    CREATE TABLE info (
        id INT UNSIGNED AUTO_INCREMENT,
        name VARCHAR(20),
        Roll_no INT,
        School VARCHAR(20),
        PRIMARY KEY (id)
    );
    

Ở đây, biến roll_no là kiểu số không dấu. Chỉ cho phép 0 và các số dương khác. Nó không có khả năng lưu trữ các giá trị âm

  • Để chỉ định cột đã ký đại diện cho cột nhiệt độ


    CREATE TABLE temp (
        sector INT,
        area_name VARCHAR(20),
        temperature INT SIGNED,
        PRIMARY KEY (sector)
    );
    

Ở đây, biến nhiệt độ là kiểu số có dấu. Tất cả các số nguyên âm và dương và số 0 có thể được lưu trữ trong biến nhiệt độ

“Unsigned” trong MySQL là một kiểu dữ liệu. Bất cứ khi nào chúng tôi viết không dấu vào bất kỳ cột nào có nghĩa là bạn không thể chèn số âm. Giả sử, đối với một số lượng rất lớn, bạn có thể sử dụng loại không dấu

Phạm vi tối đa với unsigned int là 4294967295

Note: If you insert negative value you will get a MySQL error.

Dưới đây là bản demo ví dụ về loại không dấu. Trước tiên chúng ta hãy tạo một bảng có cột “unsigned”. Sau đây là truy vấn để tạo một bảng -

mysql> create table UnsignedDemoWithPositiveValue
   -> (
   -> Distance int unsigned
   -> );
Query OK, 0 rows affected (0.86 sec)

Nếu bạn cố gắng chèn giá trị trên bằng 4294967295 không dấu, thì lỗi sẽ phát sinh do giá trị nằm ngoài phạm vi

Chèn giá trị ngoài phạm vi

mysql> insert into UnsignedDemoWithPositiveValue values(4294967296);
ERROR 1264 (22003): Out of range value for column 'Distance' at row 1

Trong ví dụ trên, tôi đã chèn 4294967296, nằm ngoài phạm vi nên phát sinh lỗi

Bây giờ tôi đang chèn một giá trị khác 4294967295 vào bảng

mysql> insert into UnsignedDemoWithPositiveValue values(4294967295);
Query OK, 1 row affected (0.30 sec)

Ở trên, bạn có thể thấy rằng truy vấn được thực hiện thành công

Bây giờ, chúng ta hãy xem một ví dụ khác. Nếu bạn chèn các bản ghi âm, thì có thể thấy lỗi sau -

Điều gì không được ký trong MySQL?

"Unsigned" trong MySQL là một loại dữ liệu . Bất cứ khi nào chúng tôi viết không dấu vào bất kỳ cột nào có nghĩa là bạn không thể chèn số âm. Giả sử, đối với một số lượng rất lớn, bạn có thể sử dụng loại không dấu. Phạm vi tối đa với unsigned int là 4294967295.

Sự khác biệt giữa đã ký và chưa ký là gì?

Số không dấu chỉ chứa giá trị 0 hoặc dương, trong khi số có dấu chứa cả số dương và số âm cùng với giá trị 0 . Giá trị lớn nhất của số có dấu bằng một nửa giá trị của số không dấu.

Tại sao chúng tôi sử dụng đã ký và chưa ký?

Các biến như số nguyên có thể được biểu diễn theo hai cách, i. e. , có dấu và không dấu. Số có dấu sử dụng cờ dấu hoặc có thể phân biệt giữa giá trị âm và giá trị dương. Trong khi các số không dấu chỉ được lưu trữ là số dương chứ không phải số âm .

Tôi nên sử dụng đã ký hoặc chưa ký?

Tóm lại, signed là một lựa chọn chung tốt - ngay cả khi bạn chắc chắn rằng tất cả các số đều dương - nếu bạn . unsigned bắt đầu có ý nghĩa hơn khi. Bạn sẽ làm những việc theo chiều bit như mặt nạ, hoặc.