Học SQL cơ bản – Các kiểu dữ liệu trong SQL Server

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ệuMô tảKích thước tối đaStorage
char(n)Chuỗi ký tự có độ rộng cố định8.000 ký tự
Chiều rộng xác định
varchar(n)Chuỗi ký tự có độ rộng thay đổi8.000 ký tự
2 byte + số ký tự
varchar(max)Chuỗi ký tự có độ rộng thay đổi1.073.741.824 ký tự
2 byte + số ký tự
textChuỗi ký tự có độ rộng thay đổi2GB dữ liệu văn bản
4 byte + số ký tự
ncharChuỗi Unicode có độ rộng cố định4.000 ký tự
Chiều rộng xác định x2
nvarcharChuỗi Unicode có độ rộng thay đổi4.000 ký tự
nvarchar(max)Chuỗi Unicode có độ rộng thay đổi
536.870.912 ký tự
ntextChuỗ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ố định8.000 byte
varbinaryChuỗi nhị phân có độ rộng thay đổi8.000 byte
varbinary(max)Chuỗi nhị phân có độ rộng thay đổi2GB
imageChuỗi nhị phân có độ rộng thay đổi2GB

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ệuMô tảStorage
bit
Số nguyên có thể là 0, 1 hoặc NULL
tinyintCho phép các số nguyên từ 0 đến 2551 byte
smallintCho phép các số nguyên từ -32.768 đến 32.7672 byte
intCho phép các số nguyên từ -2.147.483.648 đến 2.147.483.6474 byte
bigintCho phép các số nguyên trong khoảng -9.223.372.036.854.775.808 đến 9.223.372.036.854.775.8078 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
smallmoneyDữ liệu tiền tệ từ -214.748.3648 đến 214.748.36474 byte
moneyDữ liệu tiền tệ từ -922.337.203.685.477.5808 đến 922.337.203.685.477.58078 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
realDữ liệu số chính xác từ -3,40E + 38 đến 3,40E + 384 byte

Kiểu dữ liệu ngày/giờ

Kiểu dữ liệuMô tảStorage
datetimeTừ ngày 1-1-1753 đến ngày 31-12-9999 với độ chính xác 3,33 mili giây8 byte
datetime2Từ ngày 1-1-0001 đến ngày 31-12-9999 với độ chính xác 100 nano giây6-8 byte
smalldatetimeTừ ngày 1-1-1900 đến ngày 6-6-2079 với độ chính xác 1 phút4 byte
dateChỉ 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 99993 byte
timeChỉ lưu trữ thời gian với độ chính xác 100 nano giây3-5 byte
datetimeoffsetGiố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ệuMô 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