Kiểu dữ liệu trong SQL Server là gì ?
Kiểu dữ liệu (data type) trong SQL Server là đề 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 trong database, dùng để khai báo biến trong lập trình ngôn ngữ truy vấn T-SQL. 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…
Ở bài học tạo table, chúng ta đã học tạo table có các column có kiểu dữ liệu như varchar(50), int, datetime … thì bài viết hôm nay sẽ mô tả rõ hơn về kiểu dữ liệu của column trong table.
SQL Server gồm có bao nhiêu kiểu dữ liệu ?
SQL Server chia làm nhiều nhóm kiểu dữ liệu khác nhau: kiểu dữ liệu số, kiểu dữ liệu dạng chuỗi, kiểu dữ liệu ngày giờ, kiểu dữ liệu hình ảnh, kiểu dữ liệu dạng nhị phân binary.
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 |
Lưu ý: hiện nay, Microsoft khuyến cáo không sử dụng các kiểu dữ liệu text, ntext, image vì các kiểu dữ liệu này sẽ bị loại bỏ ở các phiên bản SQL Server tiếp theo. Giải pháp thay thế là sử dụng kiểu dữ liệu varbinary để thay thế.
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
|
Thực hành lại bài học tạo Table trước để hiểu rõ hơn về các kiểu dữ liệu trong SQL Server