Các kiểu dữ liệu trong SQL
Các kiểu dữ liệu trong SQL vô cùng phong phú và đa dạng. Bài viết sẽ tổng hợp cho bạn các kiểu dữ liệu SQL cần biết.
Một kiểu dữ liệu đề cập tới kiểu dữ liệu có thể được lưu trữ trong một cột của một bảng database. Ví dụ dữ liệu số nguyên, dữ liệu ký tự, dữ liệu tiền tệ, dữ liệu ngày giờ, chuỗi nhị phân và nhiều hơn thế nữa.
Trong khi tạo một bảng database trong cơ sở dữ liệu, bạn cần xác định hai thuộc tính sau để định nghĩa một cột bảng:
- Tên của cột
- Kiểu dữ liệu của cột
Ví dụ, nếu muốn lưu trữ tên học sinh trong một cột, sau đó, bạn sẽ đặt tên cột, chẳng hạn như student_name và kiểu dữ liệu của nó sẽ là char(50). Điều đó có nghĩa nó có thể chứa một chuỗi ký tự lên tới 50 ký tự.
Kiểu dữ liệu này cung cấp hướng dẫn cho SQL hiểu loại dữ liệu được mong đợi bên trong mỗi bảng, từ đó, ngăn người dùng nhập bất kỳ dữ liệu không hợp lệ vào cột. Dưới đây là chi tiết những điều bạn cần biết về kiểu dữ liệu trong SQL.
Kiểu dữ liệu SQL là gì?
Kiểu dữ liệu trong SQL được dùng để xác định loại dữ liệu có thể dược lưu trong một cột của bảng như INT, CHAR, MONEY, DATETIME… Chúng cung cấp hướng dẫn cho SQL để hiểu kiểu dữ liệu được mong đợi bên trong từng cột. Ngoài ra, chúng cũng nhận diện cách SQL tương tác với dữ liệu được lưu trữ. Đặc tính datatype ngăn người dùng nhập dữ liệu không hợp lệ.
Ví dụ, nếu muốn một cột chỉ chứa các giá trị số nguyên, bạn có thể xác định kiểu dữ liệu là INT. SQL sẽ hiện một lỗi nếu có giá trị bất kỳ khác, không phải số nguyên được chèn vào cột đó.
Các kiểu dữ liệu MySQL (Phiên bản 8.0)
Trong MySQL có ba kiểu dữ liệu chính: chuỗi, số và ngày giờ.
Kiểu dữ liệu chuỗi
Kiểu dữ liệu | Mô tả |
CHAR(size) | Một chuỗi độ dài CỐ ĐỊNH (có thể chứa các chữ cái, số và các ký tự đặc biệt). Tham số size 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 độ dài BIẾN ĐỔI (có thể chứa các chữ cái, số và các ký tự đặc biệt). Tham số size chỉ định độ dài cột tối đa tính bằng ký tự - có thể từ 0 đến 65.535 |
BINARY(size) | Bằng CHAR (), nhưng lưu trữ các chuỗi byte nhị phân. Tham số size 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ữ các chuỗi byte nhị phân. Tham số size chỉ định độ dài cột tối đa tính bằng byte. |
TINYBLOB | Đối với BLOBs (Đối tượng lớn nhị phân). Độ 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) | Đối với BLOBs (Đối tượng lớn nhị phân). 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 | Đối với BLOBs (Đối tượng lớn nhị phân). 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 | Đối với BLOBs (Đối tượng lớn nhị phân). 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 65.535 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ự 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ể có. Bạn có thể liệt kê tối đa 64 giá trị trong danh sách SET |
Kiểu dữ liệu số
Kiểu dữ liệu | Mô tả |
BIT(size) | Một kiểu giá trị bit. Số lượng bit trên mỗi giá trị được chỉ định về kích thước (size). Tham số size có thể giữ giá trị từ 1 đến 64. Giá trị mặc định là 1. |
TINYINT(size) | Một số nguyên rất nhỏ. Phạm vi thông thường là từ -128 đến 127. Phạm vi Unsigned(*) là từ 0 đến 255. Tham số size chỉ định chiều rộng hiển thị tối đa (là 255) |
BOOL | Giá trị 0 được coi là sai, các giá trị khác 0 được coi là đúng. |
BOOLEAN | Bằng với BOOL |
SMALLINT(size) | Một số nguyên nhỏ. Phạm vi thông thường là từ -32.768 đến 32.767. Phạm vi Unsigned là từ 0 đến 65.535. Tham số size chỉ định chiều rộng hiển thị tối đa (là 255) |
MEDIUMINT(size) | Một số nguyên trung bình. Phạm vi thông thường là từ -8.388.608 đến 8.388.607. Phạm vi Unsigned là từ 0 đến 16.777.215. Tham số size chỉ định chiều rộng hiển thị tối đa (là 255) |
INT(size) | Một số nguyên trung bình. Phạm vi thông thường là từ -2.147.483.648 đến 2.147.483.647. Phạm vi Unsigned là từ 0 đến 4.294.967.295. Tham số size 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. Phạm vi thông thường là từ -9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807. Phạm vi Unsigned là từ 0 đến 18.446.744.073.709.551.615. Tham số size chỉ định chiều rộng hiển thị tối đa (là 255) |
FLOAT(size, d) | Một số có dấu thập phân không cố định. Tổng số chữ số được chỉ định trong tham số size, 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ố có dấu thập phân không cố định. 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ố bình thường có dấu thập phân không cố định. Tổng số chữ số được chỉ định trong tham số size. Số chữ số sau dấu thập phân được chỉ định trong tham số d |
DOUBLE PRECISION(size, d) | |
DECIMAL(size, d) | Một số có dấu thập phân chính xác. Tổng số chữ số được chỉ định trong tham số size. Số chữ số sau dấu thập phân được chỉ định trong tham số d. Số tối đa cho size là 65. Số lớn nhất cho d là 30. Giá trị mặc định cho size là 10. Giá trị mặc định cho d là 0. |
DEC(size, d) | Bằng với DECIMAL(size, d) |
Lưu ý: Tất cả các kiểu dữ liệu số có thể có một tùy chọn bổ sung: UNSIGNED hoặc ZEROFILL. Nếu bạn thêm tùy chọn UNSIGNED, MySQL không cho phép các giá trị âm cho cột. Nếu thêm tùy chọn ZEROFILL, MySQL cũng tự động thêm thuộc tính UNSIGNED vào cột.
Kiểu dữ liệu ngày/giờ
Kiểu dữ liệu | Mô tả |
DATE | Định dạng kiểu ngày tháng: YYYY-MM-DD. Phạm vi được hỗ trợ là từ '1000-01-01' đến '9999-12-31' |
DATETIME(fsp) | Định dạng ngày và giờ kết hợp: 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 |
TIMESTAMP(fsp) | Định dạng dấu thời gian. Giá trị TIMESTAMP được lưu trữ dưới dạng số giây kể từ giai đoạn Unix ('1970-01-01 00:00:00' UTC). Định dạng hiển thị sẽ là YYYY-MM-DD hh:mm:ss. Phạm vi được hỗ trợ 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 DEFAULT CURRENT_TIMESTAMP và ON UPDATE CURRENT_TIMESTAMP trong định nghĩa cột |
TIME(fsp) | Định dạng thời gian dưới dạng: hh:mm:ss. Phạm vi được hỗ trợ là từ '-838: 59: 59' đến '838: 59: 59' |
YEAR | Định dạng năm dưới dạng bốn chữ số. Các giá trị được phép ở định dạng bốn chữ số là từ 1901 đến 2155 và 0000. MySQL 8.0 không hỗ trợ năm ở định dạng hai chữ số. |
Các kiểu dữ liệu SQL Server
Kiểu dữ liệu chuỗi
Kiểu dữ liệu | Mô tả | Kích thước tối đa | Storage |
char(n) | Chuỗi ký tự có độ rộng cố định | 8.000 ký tự | Chiều rộng xác định |
varchar(n) | Chuỗi ký tự có độ rộng thay đổi | 8.000 ký tự | 2 byte + số ký tự |
varchar(max) | Chuỗi ký tự có độ rộng thay đổi | 1.073.741.824 ký tự | 2 byte + số ký tự |
text | Chuỗi ký tự có độ rộng thay đổi | 2GB dữ liệu văn bản | 4 byte + số ký tự |
nchar | Chuỗi Unicode có độ rộng cố định | 4.000 ký tự | Chiều rộng xác định x2 |
nvarchar | Chuỗi Unicode có độ rộng thay đổi | 4.000 ký tự | |
nvarchar(max) | Chuỗi Unicode có độ rộng thay đổi | 536.870.912 ký tự | |
ntext | Chuỗi Unicode có độ rộng thay đổi | 2GB dữ liệu văn bản | |
binary(n) | Chuỗi nhị phân chiều rộng cố định | 8.000 byte | |
varbinary | Chuỗi nhị phân có độ rộng thay đổi | 8.000 byte | |
varbinary(max) | Chuỗi nhị phân có độ rộng thay đổi | 2GB | |
image | Chuỗi nhị phân có độ rộng thay đổi | 2GB |
Kiểu dữ liệu số
Kiểu dữ liệu | Mô tả | Storage |
bit | Số nguyên có thể là 0, 1 hoặc NULL | |
tinyint | Cho phép các số nguyên từ 0 đến 255 | 1 byte |
smallint | Cho phép các số nguyên từ -32.768 đến 32.767 | 2 byte |
int | Cho phép các số nguyên từ -2.147.483.648 đến 2.147.483.647 | 4 byte |
bigint | Cho phép các số nguyên trong khoảng -9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807 | 8 byte |
decimal(p,s) | Đã cố định độ chính xác và số tỷ lệ. Cho phép các số từ -1038 +1 đến 1038 -1. Tham số p cho biết tổng số chữ số tối đa có thể được lưu trữ (cả bên trái và bên phải của dấu thập phân). p phải là giá trị từ 1 đến 38. Mặc định là 18. Tham số s cho biết số lượng chữ số tối đa được lưu trữ ở bên phải của dấu thập phân. s phải là một giá trị từ 0 đến p. Giá trị mặc định là 0. | 5-17 byte |
numeric(p,s) | Đã cố định độ chính xác và số tỷ lệ. Cho phép các số từ -1038 +1 đến 1038 -1. Tham số p cho biết tổng số chữ số tối đa có thể được lưu trữ (cả bên trái và bên phải của dấu thập phân). p phải là giá trị từ 1 đến 38. Mặc định là 18. Tham số s cho biết số lượng chữ số tối đa được lưu trữ ở bên phải của dấu thập phân. s phải là một giá trị từ 0 đến p. Giá trị mặc định là 0 | 5-17 byte |
smallmoney | Dữ liệu tiền tệ từ -214.748.3648 đến 214.748.3647 | 4 byte |
money | Dữ liệu tiền tệ từ -922.337.203.685.477.5808 đến 922.337.203.685.477.5807 | 8 byte |
float(n) | Dữ liệu số chính xác từ -1,79E + 308 đến 1,79E + 308. Tham số n cho biết trường nên giữ 4 hay 8 byte. float (24) giữ trường 4 byte và float (53) giữ trường 8 byte. Giá trị mặc định của n là 53. | 4 hoặc 8 byte |
real | Dữ liệu số chính xác từ -3,40E + 38 đến 3,40E + 38 | 4 byte |
Kiểu dữ liệu ngày/giờ
Kiểu dữ liệu | Mô tả | Storage |
datetime | Từ ngày 1-1-1753 đến ngày 31-12-9999 với độ chính xác 3,33 mili giây | 8 byte |
datetime2 | Từ ngày 1-1-0001 đến ngày 31-12-9999 với độ chính xác 100 nano giây | 6-8 byte |
smalldatetime | Từ ngày 1-1-1900 đến ngày 6-6-2079 với độ chính xác 1 phút | 4 byte |
date | Chỉ lưu trữ một ngày. Từ ngày 1 tháng 1 năm 0001 đến ngày 31 tháng 12 năm 9999 | 3 byte |
time | Chỉ lưu trữ thời gian với độ chính xác 100 nano giây | 3-5 byte |
datetimeoffset | Giống như datetime2 với việc bổ sung độ lệch múi giờ | 8-10 byte |
timestamp | Lưu trữ một số duy nhất được cập nhật mỗi khi một hàng được tạo hoặc sửa đổi. Giá trị dấu thời gian dựa trên đồng hồ internal và không tương ứng với thời gian thực. Mỗi bảng chỉ có thể có một biến timestamp. |
Các kiểu dữ liệu khác
Kiểu dữ liệu | Mô tả |
sql_variant | Lưu trữ lên đến 8.000 byte dữ liệu thuộc nhiều loại dữ liệu khác nhau, ngoại trừ text, ntext và timestamp |
uniqueidentifier | Lưu trữ số nhận dạng duy nhất trên toàn cầu (GUID) |
xml | Lưu trữ dữ liệu có định dạng XML. Tối đa 2GB |
cursor | Lưu trữ một tham chiếu đến một con trỏ được sử dụng cho các hoạt động cơ sở dữ liệu |
table | Lưu trữ một tập hợp kết quả để xử lý sau này |
Các kiểu dữ liệu MS Access
Kiểu dữ liệu | Mô tả | Storage |
Text | Sử dụng cho văn bản hoặc kết hợp giữa văn bản và số. Tối đa 255 ký tự | |
Memo | Memo được sử dụng cho lượng văn bản lớn hơn. Lưu trữ lên đến 65.536 ký tự. Lưu ý: Bạn không thể sắp xếp trường dữ liệu kiểu ghi nhớ, tuy nhiên có thể tìm kiếm được dữ liệu bên trong chúng. | |
Byte | Cho phép các số nguyên từ 0 đến 255 | 1 byte |
Integer | Cho phép các số nguyên từ -32.768 đến 32.767 | 2 byte |
Long | Cho phép các số nguyên từ -2.147.483.648 đến 2.147.483.647 | 4 byte |
Single | Định dạng dấu phẩy động độ chính xác đơn. Sẽ xử lý hầu hết các số thập phân | 4 byte |
Double | Định dạng dấu phẩy động độ chính xác đôi. Sẽ xử lý hầu hết các số thập phân | 8 byte |
Currency | Sử dụng cho tiền tệ. Chứa tới 15 chữ số, cộng với 4 chữ số thập phân. Mẹo: Bạn có thể chọn đơn vị tiền tệ của quốc gia để sử dụng | 8 byte |
AutoNumber | Các trường AutoNumber tự động cung cấp cho mỗi bản ghi số của riêng nó, thường bắt đầu từ 1 | 4 byte |
Date/Time | Sử dụng cho ngày và giờ | 8 byte |
Yes/No | Trường logic có thể được hiển thị dưới dạng Yes/No, True/False hoặc On/Off. Trong code, sử dụng các hằng True và False (tương đương với -1 và 0). Lưu ý: Giá trị Null không được phép trong các trường Yes/No | 1 chút |
Ole Object | Có thể lưu trữ hình ảnh, âm thanh, video hoặc các BLOB khác (Đối tượng lớn nhị phân) | lên đến 1GB |
Hyperlink | Chứa các liên kết đến các tệp khác, bao gồm cả các trang web | |
Lookup Wizard | Cho phép bạn nhập danh sách các tùy chọn, sau đó có thể chọn từ danh sách thả xuống | 4 byte |
Trong bài tiếp theo chúng ta sẽ tìm hiểu về các toán tử trong SQL.
Bạn nên đọc
-
Muốn học về SQL và cơ sở dữ liệu, không nên bỏ qua 23 tài nguyên trực tuyến này
-
Lệnh DROP TABLE hay DELETE TABLE trong SQL
-
Lệnh SELECT trong SQL
-
Lệnh ORDER BY trong SQL
-
Microsoft chính thức khai tử Outlook.com Premium
-
Lệnh CREATE Database trong SQL
-
Cú pháp SQL cơ bản
-
Mời tải SQL Server 2017 phiên bản đầu tiên từ Microsoft
-
SQL là gì? SQL quan trọng như thế nào trong quản lý cơ sở dữ liệu?
Cũ vẫn chất
-
Vl, vkl, vcl là gì trên Facebook?
Hôm qua -
Hướng dẫn toàn tập Word 2016 (Phần 26): Tạo đồ họa SmartArt
Hôm qua -
Hướng dẫn chuyển sang ngôn ngữ tiếng Việt cho Gmail
Hôm qua -
70 câu ca dao, tục ngữ về học tập hay nhất
Hôm qua -
Cách xóa số liên hệ trên Telegram
Hôm qua -
Cách sao chép định dạng trong Google Docs, Sheets và Slides
Hôm qua -
Code LaLa Land Lục Địa Bí Ẩn mới nhất và cách nhập code
Hôm qua 2 -
Bạn đã sử dụng keo tản nhiệt đúng cách?
Hôm qua -
‘Ghét’ Apple, Mark Zuckerberg vẫn phải dùng Macbook nhưng nó lạ lắm
Hôm qua 1 -
Cách xóa khoảng trắng giữa các chữ trong Word
Hôm qua