MySQL là hệ quản trị cơ sở dữ liệu phổ biến nhất hiện nay, được sử dụng rộng rãi trong các ứng dụng web, di động,… Để có thể sử dụng tốt MySQL, bạn cần phải hiểu rõ các kiểu dữ liệu mà nó hỗ trợ. Trong bài viết này, Vietnix sẽ giới thiệu đến bạn những kiểu dữ liệu quan trọng trong MySQL, giúp bạn nắm vững kiến thức cơ bản để bắt đầu sử dụng MySQL
Kiểu dữ liệu là gì?
Kiểu dữ liệu trong cơ sở dữ liệu là nền tảng cốt lõi cho phép chúng ta chỉ định chính xác bản chất của giá trị mà từng trường hoặc cột được phép chứa. Từ kiểu số, chuỗi đến ngày tháng, mỗi loại dữ liệu không chỉ đi kèm với một định dạng cụ thể mà còn gắn liền với một giới hạn lưu trữ rõ ràng.
Trong thế giới rộng lớn của MySQL, sự đa dạng của kiểu dữ liệu được cung cấp là một lợi ích to lớn, đưa ra nhiều lựa chọn để tối ưu hóa lưu trữ và xử lý dữ liệu. Những kiểu dữ liệu này không chỉ giúp chúng ta định hình đặc tính của dữ liệu mà còn là chìa khóa để bảo vệ tính toàn vẹn và hiệu suất của cơ sở dữ liệu.
1. Kiểu dữ liệu chuỗi (String Types)
Trong MySQL, có thể sử dụng kiểu dữ liệu chuỗi để lưu trữ các giá trị dạng văn bản như nội dung, địa chỉ, họ & tên. Kiểu dữ liệu chuỗi gồm 6 dạng chính là: CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT.
Kiểu dữ liệu CHAR và VARCHAR
CHAR(size):
- Một chuỗi có độ dài CỐ ĐỊNH (có thể chứa các chữ cái, số và các ký tự đặc biệt). Tham số kích thước chỉ định độ dài cột theo ký tự – có thể từ 0 đến 255. Mặc định là 1.
VARCHAR(size):
- Một chuỗi có độ dài VARIABLE (có thể chứa các chữ cái, số và các ký tự đặc biệt).
- Tham số kích thước chỉ định độ dài cột tối đa tính bằng ký tự – có thể từ 0 đến 65535.
Kiểu dữ liệu BINARY và VARBINARY
BINARY(size):
- Bằng với CHAR (), nhưng lưu trữ chuỗi byte nhị phân.
- Tham số kích thước chỉ định độ dài cột tính bằng byte. Mặc định là 1.
VARBINARY(size):
- Bằng với VARCHAR (), nhưng lưu trữ chuỗi byte nhị phân.
- Tham số kích thước chỉ định độ dài cột tối đa tính bằng byte.
Xem thêm: SQL là gì? Các câu lệnh của SQL
Kiểu dữ liệu BLOB và TEXT
TINYBLOB:
- Dành cho BLOB (Binary Large Objects).
- Độ dài tối đa: 255 byte.
TINYTEXT:
- Giữ một chuỗi có độ dài tối đa là 255 ký tự.
TEXT(size):
- Giữ một chuỗi có độ dài tối đa là 65,535 byte.
BLOB(size):
- Dành cho BLOB (Binary Large Objects). Lưu trữ lên đến 65.535 byte dữ liệu.
MEDIUMTEXT:
- Giữ một chuỗi có độ dài tối đa là 16,777,215 ký tự.
MEDIUMBLOB:
- Dành cho BLOB (Binary Large Objects). Lưu trữ lên đến 16.777.215 byte dữ liệu.
LONGTEXT:
- Giữ một chuỗi có độ dài tối đa là 4,294,967,295 ký tự.
LONGBLOB:
- Dành cho BLOB (Binary Large Objects). Chứa tới 4.294.967.295 byte dữ liệu.
ENUM(val1, val2, val3, …):
- Một đối tượng chuỗi chỉ có thể có một giá trị, được chọn từ danh sách các giá trị có thể có.
- Bạn có thể liệt kê tới 65535 giá trị trong danh sách ENUM.
- Nếu một giá trị được chèn mà không có trong danh sách, một giá trị trống sẽ được chèn.
- Các giá trị được sắp xếp theo thứ tự bạn nhập vào.
SET(val1, val2, val3, …):
- Một đối tượng chuỗi có thể có 0 hoặc nhiều giá trị, được chọn từ danh sách các giá trị có thể.
- Bạn có thể liệt kê tối đa 64 giá trị trong danh sách SET.
--Tạo bảng
CREATE TABLE Vietnix(
VietnixID INT AUTO_INCREMENT PRIMARY KEY,
VietnixName CHAR(50), -- Định nghĩa cột với kiểu CHAR
VietnixEmail VARCHAR(255), -- Định nghĩa cột với kiểu VARCHAR
VietnixDescription TEXT, -- Định nghĩa cột với kiểu TEXT
VietnixPreferences SET('Hosting', 'VPS', 'Domain', 'Firewall') -- Định nghĩa cột với kiểu SET
);
--Chèn dữ liệu
INSERT INTO Users (VietnixName, VietnixEmail, VietnixDescription, VietnixPreferences)
VALUES ('Vietnix.vn', 'vietnix@example.com', 'Hosting,VPS Tốc độ cao Top 1 Việt Nam.', 'reading,Vietnix');
Xem thêm: MySQL là gì? Toàn bộ kiến thức về MySQL
2. Kiểu dữ liệu số (Numeric Data Types)
Kiểu dữ liệu số bao gồm 2 dạng là:
- Kiểu dữ liệu số nguyên.
- Kiểu dữ liệu số thực.
Kiểu dữ liệu số này cho phép lưu trữ và xử lý dữ liệu số với độ chính xác và kiểu dữ liệu phù hợp.
Kiểu dữ liệu số nguyên
BIT(size):
- Kiểu giá trị bit. Số lượng bit trên mỗi giá trị được chỉ định rõ về kích thước. Tham số kích thước có thể giữ giá trị từ 1 đến 64. Giá trị mặc định cho kích thước là 1.
TINYINT(size):
- Một số nguyên rất nhỏ. Phạm vi đã ký là từ -128 đến 127. Phạm vi chưa ký là từ 0 đến 255. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
BOOL:
- Số 0 được coi là sai, các giá trị khác 0 được coi là đúng.
BOOLEAN:
- Tương đương với BOOL.
SMALLINT(size):
- Một số nguyên nhỏ. Dải ô đã ký là từ -32768 đến 32767. Dải ô chưa ký là từ 0 đến 65535. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
MEDIUMINT(size):
- Một số nguyên trung bình. Dải ô đã ký là từ -8388608 đến 8388607. Dải ô chưa ký là từ 0 đến 16777215. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
INT(size):
- Một số nguyên trung bình. Dải ô đã ký là từ -2147483648 đến 2147483647. Dải ô chưa ký là từ 0 đến 4294967295. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
INTEGER(size):
- Bằng INT(size).
BIGINT(size):
- Một số nguyên lớn. Dải ô đã ký là từ -9223372036854775808 đến 9223372036854775807. Dải ô chưa ký là từ 0 đến 18446744073709551615. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
--Tạo bảng
CREATE TABLE Vietnix(
ProductID INT AUTO_INCREMENT PRIMARY KEY,
Quantity SMALLINT UNSIGNED, -- Sử dụng kiểu dữ liệu SMALLINT UNSIGNED cho số lượng
Price DECIMAL(10, 2) -- Sử dụng DECIMAL cho giá, với 10 chữ số và 2 chữ số thập phân
);
--Chèn dữ liệu
INSERT INTO Products (Quantity, Price)
VALUES (10, 199.99); -- Chèn dữ liệu vào cột Quantity và Price
Kiểu dữ liệu số thực
FLOAT(size, d):
- Một số dấu phẩy động. Tổng số chữ số được chỉ định về kích thước.
- Số chữ số sau dấu thập phân được chỉ định trong tham số d. Cú pháp này không được chấp nhận trong MySQL 8.0.17 và nó sẽ bị xóa trong các phiên bản MySQL trong tương lai.
FLOAT(p):
- Một số dấu phẩy động.
- MySQL sử dụng giá trị p để xác định xem nên sử dụng FLOAT hay DOUBLE cho kiểu dữ liệu kết quả.
- Nếu p từ 0 đến 24, kiểu dữ liệu sẽ trở thành FLOAT (). Nếu p từ 25 đến 53, kiểu dữ liệu trở thành DOUBLE ().
DOUBLE(size, d):
- Một số dấu phẩy động có kích thước thông thường.
- Tổng số chữ số được chỉ định về kích thước. S
- Ô chữ số sau dấu thập phân được chỉ định trong tham số d.
DECIMAL(size, d):
- Một số điểm cố định chính xác.
- Tổng số chữ số được chỉ định về kích thước.
- Số chữ số sau dấu thập phân được chỉ định trong tham số d. Số tối đa cho kích thước là 65. Số lớn nhất cho d là 30.
- Giá trị mặc định cho kích thước là 10. Giá trị mặc định cho d là 0.
DEC(size, d):
- Bằng với DECIMAL(size,d).
--Tạo bảng
CREATE TABLE VietnixRecords (
RecordID INT AUTO_INCREMENT PRIMARY KEY,
TransactionAmount DECIMAL(10, 2) -- Sử dụng DECIMAL để biểu diễn số tiền
);
--Chèn dữ liệu
INSERT INTO VietnixRecords (TransactionAmount)
VALUES (12345.67); -- Chèn số tiền với hai chữ số thập phân
3. Kiểu dữ liệu ngày và giờ (Date and Time)
Các kiểu dữ liệu ngày và giờ trong MySQL cần lưu ý về định dạng và phạm vi được hỗ trợ.
Kiểu dữ liệu DATE
- Dữ liệu ngày tháng.
- Định dạng: YYYY-MM-DD.
- Phạm vi được hỗ trợ là từ ‘1000-01-01’ đến ‘9999-12-31’.
Kiểu dữ liệu DATETIME(fsp)
- Ngày và giờ kết hợp.
- Định dạng: YYYY-MM-DD hh: mm: ss.
- Phạm vi được hỗ trợ là từ ‘1000-01-01 00:00:00’ đến ‘9999-12-31 23:59:59’.
- Thêm DEFAULT và ON UPDATE trong định nghĩa cột để tự động khởi tạo và cập nhật cho ngày và giờ hiện tại.
Kiểu dữ liệu TIMESTAMP(fsp)
- Dấu thời gian.
- Giá trị TIMESTAMP được lưu trữ dưới dạng số giây kể từ kỷ nguyên Unix (‘1970-01-01 00:00:00’ UTC).
- Định dạng: YYYY-MM-DD hh: mm: ss.
- Phạm vi được hỗ trợ là từ ‘1970-01-01 00:00:01’ UTC đến ‘2038-01-09 03:14:07’ UTC.
- Có thể chỉ định tự động khởi tạo và cập nhật cho ngày và giờ hiện tại bằng cách sử dụng.
Kiểu dữ liệu TIME(fsp)
- Dữ liệu thời gian.
- Định dạng: hh: mm: ss.
- Phạm vi được hỗ trợ là từ ‘-838: 59: 59’ đến ‘838: 59: 59’.
Kiểu dữ liệu YEAR
- Một năm ở định dạng bốn chữ số.
- Các giá trị được phép ở định dạng bốn chữ số: 1901 đến 2155 và 0000.
- Kiểu dữ liệu trong MySQL 8.0 không hỗ trợ năm ở định dạng hai chữ số.
CREATE TABLE Vietnix(
VietnixID INT AUTO_INCREMENT PRIMARY KEY,
VietnixName VARCHAR(100),
VietnixDate DATE,
VietnixTime TIME,
VietnixDateTime DATETIME
);
--Chèn dữ liệu
INSERT INTO Vietnix (VietnixName, VietnixDate, VietnixTime, VietnixDateTime)
VALUES ('Hosting, VPS, Firewall', '2023-11-10', '14:00:00', '2023-11-10 14:00:00');
Xem thêm: Xử lý datetime trong Laravel và PHP
Bảng tổng hợp các kiểu dữ liệu trong MySQL
Sau đây Vietnix sẽ liệt kê tóm tắt các kiểu dữ liệu đã kê ở trên:
DATE TYPE | ĐẶC ĐIỂM | DATA TYPE | ĐẶC ĐIỂM |
---|---|---|---|
CHAR | String (0 – 255) | INT | Integer (-2147483648 to 2147483647) |
VARCHAR | String (0 – 255) | BIGINT | Integer (-9223372036854775808 to 9223372036854775807) |
TINYTEXT | String (0 – 255) | FLOAT | Decimal (precise to 23 digits) |
TEXT | String (0 – 65535) | DOUBLE | Decimal (24 to 53 digits) |
BLOB | String (0 – 65535) | DECIMAL | “DOUBLE” stored as string |
MEDIUMTEXT | String (0 – 16777215) | DATE | YYYY-MM-DD |
MEDIUMBLOB | String (0 – 16777215) | DATETIME | YYYY-MM-DD HH:MM:SS |
LONGTEXT | String (0 – 4294967295) | TIMESTAMP | YYYYMMDDHHMMSS |
LONGBLOB | String (0 – 4294967295) | TIME | HH:MM:SS |
TINYINT | Integer (-128 to 127) | ENUM | Một đối tượng chuỗi chỉ có thể có một giá trị, Có thể liệt kê tới 65535 giá trị |
SMALLINT | Integer (-32768 to 32767) | SET | Một đối tượng chuỗi chỉ có thể có một giá trị, Tối đa 64 giá trị trong danh sách SET |
MEDIUMINT | Integer (-8388608 to 8388607) | BOOLEAN | TINYINT(1) |
Câu hỏi thường gặp
Hình ảnh nên sử dụng kiểu dữ liệu nào?
Trong MySQL, hình ảnh thường được lưu trữ sử dụng kiểu dữ liệu BLOB (Binary Large Object).
Lời kết
Hy vọng bài viết trên sẽ giúp bạn nắm được kiến thức về các kiểu dữ liệu trong MySQL. Nếu có thắc mắc hay bất kỳ ý kiến gì, mời bạn để lại bình luận phía dưới bài viết này. Vietnix xin chân thành cảm ơn bạn đã quan tâm.