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ệuMô 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ệuMô 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ệuMô 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ệ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

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

Các kiểu dữ liệu MS Access

Kiểu dữ liệuMô 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.
ByteCho phép các số nguyên từ 0 đến 2551 byte
IntegerCho phép các số nguyên từ -32.768 đến 32.7672 byte
LongCho phép các số nguyên từ -2.147.483.648 đến 2.147.483.6474 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ân4 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ân8 byte
CurrencySử 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ụng8 byte
AutoNumberCá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ừ 14 byte
Date/TimeSử dụng cho ngày và giờ8 byte
Yes/NoTrườ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/No1 chút
Ole ObjectCó 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 WizardCho 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ống4 byte

Trong bài tiếp theo chúng ta sẽ tìm hiểu về các toán tử trong SQL.

Thứ Năm, 07/09/2023 17:06
411 👨 41.791
0 Bình luận
Sắp xếp theo
    ❖ Học SQL