MySQL CHƯA KÝ

Lưu ý rằng với UNSIGNED, về cơ bản, bạn đang dành cho mình gấp đôi dung lượng cho số nguyên vì bạn chỉ định rõ ràng rằng bạn không cần số âm

Khi quyết định sử dụng SIGNED hoặc UNSIGNED cho một trường, hãy tự hỏi liệu trường này có bao giờ chứa giá trị âm hay không. Nếu câu trả lời là không, thì bạn muốn có kiểu dữ liệu UNSIGNED. Một trường hợp sử dụng phổ biến cho UNSIGNED là dành cho các trường id tăng tự động trong một bảng

Để chỉ định cột id tăng tự động UNSIGNED

SIGNED3

Để chỉ định một cột SIGNED SIGNED5 để thể hiện lợi nhuận từ các khoản đầu tư

SIGNED6

Vì cột SIGNED5 có thể lấy các giá trị âm để thể hiện các khoản lỗ đối với các khoản đầu tư, chúng tôi đã chỉ định cột là SIGNED

Trong bài viết các bạn sẽ tìm hiểu về kiểu dữ liệu số nguyên SIGNED và UNSIGNED trong MySQL. Bài viết cung cấp thông tin về các loại số nguyên với các thuộc tính ZEROFILL, AUTO_INCREMENT và display_width, cũng như mô tả các ví dụ về thời điểm và cách sử dụng các loại dữ liệu số nguyên

MySQL CHƯA KÝ

nội dung

MySQL INTEGER là gì

Trong MySQL, INTEGER (INT) là một giá trị số không có phần thập phân. Nó định nghĩa các số nguyên có thể được lưu trữ trong một trường hoặc cột. Ngoài ra, MySQL hỗ trợ thuộc tính display_width (ví dụ: INT(1)) và thuộc tính ZEROFILL, tự động thêm số 0 vào giá trị tùy thuộc vào độ rộng hiển thị

Ngoại trừ các kiểu dữ liệu INT và SMALLINT tiêu chuẩn, MySQL hỗ trợ các kiểu dữ liệu số TINYINT, MEDIUMINT và BIGINT có thể ĐƯỢC KÝ và KHÔNG KÝ

Bảng hiển thị dung lượng lưu trữ được phép theo byte, giá trị tối đa và tối thiểu của các kiểu dữ liệu số nguyên ĐÃ KÝ và KHÔNG KÝ

TypStorage (byte) Giá trị tối thiểu có dấu hiệu giá trị unsignedMaxImum Giá trị có dấu hiệu không dấu unsignedtinyint1-128012725555

Thông thường, các loại dữ liệu INTEGER được sử dụng để biểu thị ID, ngày và giờ (ví dụ: DATETIME, DATE, YEAR, TIMESTAMP), các thuộc tính chiều rộng và chiều cao, v.v.

ĐÃ KÝ vs CHƯA KÝ

Như đã đề cập trước đó, kiểu dữ liệu INTEGER có thể KHÔNG KÝ và ĐÃ KÝ. UNSIGNED chỉ có thể lưu số 0 và số dương trong một cột. Nếu các giá trị trong cột không bao giờ sử dụng số âm hoặc khi có nhu cầu sử dụng phạm vi số phía trên lớn hơn cho cột, bạn có thể đặt UNSIGNED, do đó có thể giúp lập chỉ mục nhanh hơn

SIGNED có thể cho phép số không, số dương và số âm. Với giá trị MySQL là SIGNED, một bit được lấy cho ký hiệu dấu trái ngược với ký hiệu không dấu, khi chúng không có dấu trước giá trị

Trong MySQL, INT thường được chọn làm khóa chính và có thể có thuộc tính AUTO_INCREMENT trong cột. Ví dụ: khi bạn thêm NULL hoặc 0 vào thuộc tính INT AUTO_INCREMENT, giá trị cột sẽ tự động tăng lên và thay đổi thành giá trị tuần tự tiếp theo được tạo theo thứ tự tăng dần. Khi bạn thêm một giá trị khác 0 vào thuộc tính INT AUTO_INCREMENT, giá trị này được chấp nhận và trình tự được đặt lại, nghĩa là giá trị được chèn đứng trước các giá trị trình tự được tạo tự động (i. e. giá trị+1). Hãy nhớ rằng các cột có AUTO_INCREMENT không lưu trữ giá trị âm, điều đó có nghĩa là các cột có AUTO_INCREMENT không được ký theo mặc định

Kiểu dữ liệu UNSIGNED INT là gì?

Khi chúng tôi đặt cột MySQL INT UNSIGNED, điều đó có nghĩa là không thể chèn các giá trị âm vào cột này. Giá trị phạm vi tối đa với loại dữ liệu UNSIGNED là 4294967295, trong khi giá trị nhỏ nhất là 0. Do đó, nếu bạn chèn một giá trị âm hoặc một giá trị vượt quá giá trị tối đa, bạn sẽ gặp lỗi vì đó sẽ là giá trị nằm ngoài phạm vi. Hãy xem ví dụ về cách tạo bảng với các cột INT UNSIGNED. Vì ID thường là kiểu dữ liệu số nên chúng tôi sẽ sử dụng nó làm khóa chính INT UNSIGNED

Tạo một bảng với ví dụ dữ liệu UNSIGNED

Đối với một ví dụ demo, chúng tôi sẽ sử dụng dbForge Studio cho MySQL

Để bắt đầu, hãy tạo bảng sản phẩm có total_amount làm kiểu dữ liệu INT UNSIGNED. Đối với điều này, trên thanh công cụ tiêu chuẩn, hãy nhấp vào SQL mới, nhập truy vấn và nhấp vào Thực thi hoặc nhấn F5

MySQL CHƯA KÝ

Sau đó, chèn một hàng mới – GIÁ TRỊ – vào bảng MySQL và thực hiện truy vấn

MySQL CHƯA KÝ

Để kiểm tra kết quả, truy xuất dữ liệu. Đối với điều này, trong Database Explorer, nhấp chuột phải vào bảng sản phẩm và chọn Truy xuất dữ liệu. Như bạn có thể thấy, các giá trị đã được thêm vào

MySQL CHƯA KÝ

Và bây giờ, hãy chèn một hàng mới nhưng có số âm cho cột INT UNSIGNED và thực hiện truy vấn

INSERT INTO products (product_id, product_item, category, total_amount)
  VALUES (2, 'apples', 'fruits', -5);

Như bạn có thể thấy, khi thực hiện truy vấn, chúng tôi gặp lỗi vì UNSIGNED không hỗ trợ các giá trị âm

MySQL CHƯA KÝ

INTEGER Chiều rộng màn hình. INT()

Trong MySQL, bạn có thể đặt độ rộng hiển thị cho kiểu dữ liệu INT. Chiều rộng hiển thị là số trong ngoặc đơn đại diện cho chiều dài đầu ra, i. e. có bao nhiêu ký tự sẽ được hiển thị trong cột khi lấy dữ liệu cho cột. Vì vậy, nó chỉ quan trọng khi hiển thị đầu ra

Hãy xem xét những điều sau đây. Nếu bạn chỉ định 5 làm giá trị cho các cột int(1), int(6), int(10) và int(11), tất cả chúng sẽ xuất ra cùng một giá trị – 5. Trên thực tế, chiều rộng hiển thị tạo ra sự khác biệt khi bạn đặt thuộc tính ZEROFILL. Trong trường hợp này, kết quả sẽ hiển thị lần lượt là 5, 000005, 0000000005 và 00000000005

Lưu ý rằng chiều rộng hiển thị không ảnh hưởng đến phạm vi giá trị tối đa và tối thiểu. Các giá trị tối thiểu và tối đa của cột và kích thước lưu trữ (tính bằng byte) chỉ phụ thuộc vào loại số nguyên bạn sử dụng chứ không phụ thuộc vào độ dài. Các giá trị int(1), int(6), int(10) và int(11) sẽ có giá trị lớn nhất trong phạm vi bằng 2147483647 (đối với INT có dấu) và 4294967295 (đối với INT không dấu)

MySQL INT với thuộc tính ZEROFILL

Nếu bạn cần thay khoảng trắng bằng số 0, bạn có thể sử dụng thuộc tính ZEROFILL cho cột MySQL INT UNSIGNED. Ví dụ cột INT(3) ZEROFILL có giá trị là 1 thì kết quả bạn lấy ra sẽ là 001

Ghi chú. Hãy nhớ rằng UNSIGNED sẽ tự động được thêm vào cột số

Hãy xem ví dụ. Chúng tôi tạo một bảng MySQL ProductsNew có các cột có thuộc tính ZEROFILL

Trong một tài liệu SQL mới, hãy thực thi câu lệnh CREATE sau

CREATE TABLE ProductsNew(
  product_id INT AUTO_INCREMENT,
  product_item varchar(255) NOT NULL,
  category varchar(255) NOT NULL,
  weight int(2) ZEROFILL,
  review int(3) ZEROFILL,
  PRIMARY KEY (product_id)
);

Sau đó, chèn một hàng mới vào bảng ProductsNew bằng cách sử dụng câu lệnh INSERT INTO và thực thi nó

INSERT INTO ProductsNew (product_id, product_item, category, weight, review)
  VALUES (3, 'tomatoes', 'vegetables', 5, 7);

Truy xuất dữ liệu và kiểm tra kết quả

MySQL CHƯA KÝ

Hãy nhớ rằng đối với MySQL 8. 0. 17, thuộc tính ZEROFILL không được dùng cho các loại dữ liệu số

Các loại INT của MySQL

Như đã đề cập trước đó, MySQL hỗ trợ các kiểu dữ liệu chuẩn SQL INT và SMALLINT. Bên cạnh đó, MySQL hỗ trợ TINYINT, MEDIUMINT và BIGINT. Chọn kiểu dữ liệu số nguyên nào tùy thuộc vào dữ liệu bạn sẽ lưu trữ trong cột. Ví dụ: nếu bạn chắc chắn rằng giá trị trong cột sẽ không vượt quá giá trị tối đa trong phạm vi INT – 255, thì bạn có thể sử dụng kiểu dữ liệu TINYINT, do đó, sẽ cải thiện hiệu suất cơ sở dữ liệu. Tuy nhiên, nếu bạn cần lưu trữ dữ liệu khổng lồ chẳng hạn như cơ sở khách hàng sẽ không ngừng tăng lên, sẽ tốt hơn nếu bạn sử dụng INT hoặc BIGINT. Ngoài ra, nếu dữ liệu được lưu trữ trong cột sẽ không bao giờ sử dụng giá trị âm, thì nên đặt UNSIGNED. Phạm vi INT sẽ giống nhau, ví dụ: cho INT(5), INT(1), INT(100)

Chúng ta hãy xem xét từng loại dữ liệu số nguyên và các ví dụ về cách sử dụng chúng

Ví dụ TINYINT

TINYINT là một số nguyên rất nhỏ. Các giá trị SIGNED tối thiểu và tối đa lần lượt là -128 và 127, trong khi đối với các giá trị UNSIGNED phạm vi TINYINT là từ 0 đến 255. TINYINT sử dụng 1 byte mỗi hàng. Đây là lựa chọn tốt nhất khi bạn muốn tiết kiệm dung lượng trên đĩa và nâng cao hiệu suất

Xem xét ví dụ về cách sử dụng số nguyên TINYINT. Tạo bảng StudentGroup bằng câu lệnh CREATE

CREATE TABLE StudentGroup(
  id tinyint AUTO_INCREMENT,
  Name varchar(255) NOT NULL,
  Surname varchar(255) NOT NULL,
  Grade tinyint(4) UNSIGNED,
    PRIMARY KEY (id)
);

Sau đó, chèn dữ liệu vào cột bằng câu lệnh INSERT

INSERT INTO StudentGroup (id, Name, Surname, Grade)
  VALUES (1, 'John', 'Smith', 5); 

Sau khi truy xuất dữ liệu, chúng tôi thấy rằng truy vấn đã được hoàn thành thành công

MySQL CHƯA KÝ

Nhưng nếu chúng tôi chèn giá trị không được bao gồm trong phạm vi và cố truy xuất dữ liệu,

INSERT INTO StudentGroup (id, Name, Surname, Grade)
  VALUES (1, 'John', 'Smith', -5); 

chúng ta sẽ gặp lỗi ‘Out of range value for column ‘Grade’ ở hàng 12′

Lưu ý rằng bắt đầu với MySQL 8. 0, chiều rộng hiển thị không được dùng cho TINYINT và bạn nên tính đến chiều rộng này khi chuyển sang phiên bản mới. Tuy nhiên, sự phản đối này không ảnh hưởng đến TINYINT(1), nhưng quan trọng đối với TINYINT(4)

NHỎ Ví dụ

SMALLINT là một số nguyên nhỏ. Phạm vi SMALLINT cho các giá trị ĐÃ KÝ là từ -32768 đến 32767. Các giá trị tối thiểu và tối đa cho SMALLINT UNSIGNED lần lượt là 0 và 65535. Kích thước là 2 byte mỗi hàng

Một ví dụ về cách sử dụng SMALLINT như sau. Tạo bảng SmallintTable bằng câu lệnh CREATE

CREATE TABLE SmallintTable(
  ID smallint AUTO_INCREMENT,
  value_1 smallint SIGNED,
  value_2 smallint(6) UNSIGNED,
    PRIMARY KEY (id)
);

Chèn các giá trị cột tương ứng với phạm vi SMALLINT và thực hiện truy vấn

INSERT INTO SmallintTable (ID, value_1, value_2)
  VALUES (1, -768, 0);

Khi truy xuất dữ liệu, truy vấn đã hoàn thành mà không có lỗi

MySQL CHƯA KÝ

Bây giờ, hãy thay đổi các giá trị bằng cách chèn dữ liệu không có trong phạm vi NHỎ

________số 8_______

Do đó, bạn sẽ thấy thông báo lỗi rằng các giá trị nằm ngoài phạm vi

Lưu ý rằng bắt đầu với MySQL 8. 0, chiều rộng hiển thị không được dùng cho SMALLINT và bạn nên tính đến chiều rộng này khi di chuyển sang phiên bản mới. Tuy nhiên, sự phản đối này không ảnh hưởng đến SMALLINT(1)

TRUNG BÌNH Ví dụ

MEDIUMINT là một số nguyên có kích thước trung bình. Các giá trị tối thiểu và tối đa cho MEDIUMINT SIGNED lần lượt là -8388608 và 8388607. Phạm vi cho các giá trị UNSIGNED tối thiểu và tối đa lần lượt bằng 0 và 16777215. Kích thước là 3 byte mỗi hàng

Một ví dụ về cách sử dụng MEDIUMINT như sau. Đầu tiên, tạo một bảng MediumIntTable bằng câu lệnh CREATE

CREATE TABLE MediumIntTable(
  ID mediumint AUTO_INCREMENT,
  value_1 mediumint,
  value_2 mediumint(6) UNSIGNED,
    PRIMARY KEY (ID)
);

Sau đó, thêm các giá trị chính xác vào truy vấn, truy xuất dữ liệu để xem mọi thứ có hoạt động chính xác không

CREATE TABLE ProductsNew(
  product_id INT AUTO_INCREMENT,
  product_item varchar(255) NOT NULL,
  category varchar(255) NOT NULL,
  weight int(2) ZEROFILL,
  review int(3) ZEROFILL,
  PRIMARY KEY (product_id)
);
0
MySQL CHƯA KÝ

Sau đó, sửa đổi các giá trị thành giá trị vượt quá phạm vi cho phép.

CREATE TABLE ProductsNew(
  product_id INT AUTO_INCREMENT,
  product_item varchar(255) NOT NULL,
  category varchar(255) NOT NULL,
  weight int(2) ZEROFILL,
  review int(3) ZEROFILL,
  PRIMARY KEY (product_id)
);
1

Do đó, thông báo lỗi thông báo rằng giá trị_2 nằm ngoài phạm vi xuất hiện

Lưu ý rằng bắt đầu với MySQL 8. 0, chiều rộng hiển thị không được dùng cho MEDIUMINT và bạn nên tính đến chiều rộng này khi di chuyển sang phiên bản mới. Tuy nhiên, sự phản đối này không ảnh hưởng đến MEDIUMINT(1)

Ví dụ BIGINT

BIGINT là một số nguyên lớn. Các giá trị tối thiểu và tối đa cho SIGNED lần lượt là – -263 và 263-1. Phạm vi cho các giá trị tối thiểu và tối đa cho UNSIGNED lần lượt bằng 0 và 264-1. Kích thước là 8 byte mỗi hàng

Một ví dụ về cách sử dụng BIGINT như sau. Hãy tạo một bảng BigIntTable với kiểu dữ liệu BIGINT và thuộc tính AUTO_INCREMENT cho cột ID. Sau đó, thêm vào truy vấn một số âm dưới dạng giá trị_1 và một số dương dưới dạng giá trị_2 được bao gồm trong phạm vi

CREATE TABLE ProductsNew(
  product_id INT AUTO_INCREMENT,
  product_item varchar(255) NOT NULL,
  category varchar(255) NOT NULL,
  weight int(2) ZEROFILL,
  review int(3) ZEROFILL,
  PRIMARY KEY (product_id)
);
2

Sau đó, truy xuất dữ liệu để đảm bảo rằng nó hoạt động chính xác

MySQL CHƯA KÝ

Sau khi hoàn tất, hãy sửa đổi các giá trị thành giá trị vượt quá phạm vi cho phép

CREATE TABLE ProductsNew(
  product_id INT AUTO_INCREMENT,
  product_item varchar(255) NOT NULL,
  category varchar(255) NOT NULL,
  weight int(2) ZEROFILL,
  review int(3) ZEROFILL,
  PRIMARY KEY (product_id)
);
3

Do đó, thông báo lỗi thông báo rằng giá trị_2 nằm ngoài phạm vi xuất hiện

Chúng tôi muốn đề cập rằng việc sử dụng INT làm khóa chính, khóa ngoại hoặc chỉ mục thay vì BIGINT có thể là một điểm quan trọng trong việc cải thiện hiệu suất, tiết kiệm dung lượng ổ đĩa và giảm kích thước chỉ mục

Lưu ý rằng bắt đầu với MySQL 8. 0, chiều rộng hiển thị không được dùng cho BIGINT và bạn nên tính đến chiều rộng này khi di chuyển sang phiên bản mới. Tuy nhiên, sự phản đối này không ảnh hưởng đến BIGINT(1)

Phần kết luận

Trong bài viết này, chúng ta đã xem xét các kiểu dữ liệu INTEGER của MySQL, các giá trị SIGNED và UNSIGNED, các thuộc tính AUTO_INCREMENT, ZEROFILL và display_width. Tùy thuộc vào dự án của bạn, bạn nên chọn kiểu dữ liệu INTEGER nào phù hợp với mình nhất. Ngoài ra, bài viết cung cấp các ví dụ về cách thức và thời điểm sử dụng kiểu dữ liệu INTEGER trong MySQL

Tải xuống phiên bản dùng thử miễn phí 30 ngày để dùng thử và đánh giá tất cả các tính năng nâng cao và có giá trị của dbForge Studio dành cho MySQL và các công cụ dbForge MySQL khác giúp cải thiện đáng kể hiệu suất của bạn, tối đa hóa năng suất và cho phép bạn xử lý các tác vụ quản lý và phát triển cơ sở dữ liệu một cách nhanh chóng và dễ dàng

Không được ký tên trong MySQL có nghĩa là gì?

Kiểu dữ liệu UNSIGNED INT là gì? . Giá trị phạm vi tối đa với loại dữ liệu UNSIGNED là 4294967295, trong khi giá trị nhỏ nhất là 0. negative values cannot be inserted in this column. The maximum range value with the UNSIGNED data type is 4294967295, while the minimum one is 0.

INT đã ký và chưa ký trong MySQL là gì?

Phạm vi đã ký là -2147483648 đến 2147483647. Dải ô không dấu là từ 0 đến 4294967295 . Loại này là một từ đồng nghĩa với INT. Một số nguyên lớn.

Cái gì không được ký trong Mariadb?

Một số nguyên kích thước bình thường. Khi được đánh dấu CHƯA KÝ, giá trị này nằm trong khoảng từ 0 đến 4294967295 , nếu không thì giá trị này nằm trong khoảng -2147483648 đến 2147483647 (ĐÃ KÝ là mặc định). Nếu một cột đã được đặt thành ZEROFILL, tất cả các giá trị sẽ được thêm các số 0 vào trước để giá trị INT chứa một số M chữ số.

Giá trị không dấu là gì?

Số nguyên không dấu (thường được gọi là "uints") giống như số nguyên (số nguyên) nhưng có thuộc tính là chúng không có dấu + hoặc - đi kèm với chúng< . Do đó, chúng luôn không âm (không hoặc dương). . Thus they are always non-negative (zero or positive).