SQL Server đang dần trở nên ưa chuộng bởi người dùng trong công nghệ hiện nay. Vì vậy hãy cùng Bizfly Cloud tìm hiểu về các kiểu dữ liệu trong SQL qua bài viết này nhé!
1. Các kiểu dữ liệu trong SQL
Kiểu dữ liệu xác định loại giá trị mà cột dữ liệu đó chứa: dữ liệu nguyên, dữ liệu ký tự, dữ liệu tiền tệ, dữ liệu ngày tháng và thời gian, chuỗi nhị phân,…
Mỗi cột trong bảng cơ sở dữ liệu được yêu cầu phải có tên và kiểu dữ liệu.
Một SQL developer phải quyết định loại dữ liệu nào sẽ được lưu trữ bên trong mỗi cột khi tạo bảng. Kiểu dữ liệu là một hướng dẫn giúp SQL hiểu loại dữ liệu nào ở bên trong mỗi cột và nó cũng xác định cách SQL sẽ tương tác với dữ liệu được lưu trữ.
Lưu ý:
Các kiểu dữ liệu có thể có các tên khác nhau trong cơ sở dữ liệu khác nhau. Và ngay cả khi trùng tên nhau thì kích thước và các chi tiết bên trong vẫn có thể khác nhau! Vì vậy bạn hãy luôn nhớ kiểm tra tài liệu!
>> Tìm hiểu thêm: Vài điều cơ bản về SQL là gì?
2. Các kiểu dữ liệu trong MySQL
Trong MySQL có ba loại dữ liệu chính: văn bản (text), số (number) và ngày tháng (date).
Loại dữ liệu kiểu text
CHAR(size): Lưu trữ một chuỗi có độ dài cố định (có thể chứa chữ cái, số và ký tự đặc biệt). Kích thước cố định được xác định trong dấu ngoặc đơn. Có thể lưu trữ tối đa 255 ký tự.
VARCHAR(size): Lưu trữ một chuỗi có độ dài thay đổi (có thể chứa chữ cái, số và ký tự đặc biệt). Kích thước tối đa được chỉ định trong dấu ngoặc đơn. Có thể lưu trữ tối đa 255 ký tự.
Lưu ý: Nếu bạn đặt giá trị lớn hơn 255, giá trị này sẽ được chuyển thành loại TEXT.
TINYTEXT: Lưu trữ một chuỗi có độ dài tối đa 255 ký tự.
TEXT: Lưu trữ một chuỗi có độ dài tối đa 65.535 ký tự
BLOB: Đối với BLOB (Binary Large OBjects). Lưu trữ tối đa 65.535 byte dữ liệu.
MEDIUMTEXT: Lưu trữ một chuỗi có độ dài tối đa 16,777,215 ký tự.
MEDIUMBLOB: Đối với BLOB (Binary Large OBjects). Lưu trữ tối đa 16.777.215 byte dữ liệu.
LONGTEXT: Lưu trữ một chuỗi có độ dài tối đa là 4,294,967,295 ký tự.
LONGBLOB: Đối với BLOB (Binary Large OBjects). Lưu trữ lên đến 4.294.967.295 byte dữ liệu.
ENUM(x,y,z,etc.): Cho phép bạn nhập danh sách các giá trị có thể có. Bạn có thể liệt kê tối đa 65535 giá trị trong danh sách ENUM. Nếu một giá trị được chèn vào không có trong danh sách, một giá trị trống sẽ được chèn vào.
Lưu ý: Các giá trị được sắp xếp theo thứ tự bạn nhập vào. Bạn nhập các giá trị có thể có trong định dạng này: ENUM (‘X’, ‘Y’, ‘Z’).
SET: Tương tự như ENUM, trừ đặc điểm SET có thể chứa tối đa 64 list items và có thể lưu trữ nhiều hơn một lựa chọn.
Loại dữ liệu kiểu số (number)
TINYINT (size): -128 đến 127 thông thường. 0 đến 255 UNSIGNED*. Số lượng chữ số tối đa có thể được chỉ định trong dấu ngoặc đơn.
SMALLINT(size): -32768 đến 32767 thông thường. 0 đến 65535 UNSIGNED*. Số lượng chữ số tối đa có thể được chỉ định trong dấu ngoặc đơn.
MEDIUMINT(size): -8388608 đến 8388607 thông thường. 0 đến 16777215 UNSIGNED*. Số lượng chữ số tối đa có thể được chỉ định trong dấu ngoặc đơn.
INT(size): -2147483648 đến 2147483647 thông thường. 0 đến 4294967295 UNSIGNED*. Số lượng chữ số tối đa có thể được chỉ định trong dấu ngoặc đơn.
BIGINT(size): -9223372036854775808 đến 9223372036854775807 thông thường. 0 đến 18446744073709551615 UNSIGNED*. Số lượng chữ số tối đa có thể được chỉ định trong dấu ngoặc đơn.
FLOAT(size,d): Một số nhỏ có dấu thập phân không cố định (floating decimal point). Số lượng chữ số tối đa có thể được chỉ định trong tham số size. Số chữ số tối đa ở bên phải dấu thập phân được chỉ định trong tham số d.
DOUBLE(size,d): Một số lớn có dấu thập phân không cố định. Số lượng chữ số tối đa có thể được chỉ định trong tham số size. Số chữ số tối đa ở bên phải dấu thập phân được chỉ định trong tham số d.
DECIMAL(size,d): Một DOUBLE được lưu trữ dưới dạng một chuỗi, cho phép một dấu thập phân cố định. Số lượng chữ số tối đa có thể được chỉ định trong tham số size. Số chữ số tối đa ở bên phải dấu thập phân được chỉ định trong tham số d.
*Các kiểu số nguyên có một tùy chọn phụ gọi là UNSIGNED. Thông thường, số nguyên đi từ giá trị âm sang giá trị dương. Việc thêm thuộc tính UNSIGNED sẽ dịch chuyển phạm vi đó lên để nó bắt đầu bằng 0 thay vì một số âm.
Loại dữ liệu kiểu ngày (date)
DATA(): Một ngày. Định dạng: YYYY-MM-DD
Lưu ý: Phạm vi được hỗ trợ là từ ‘1000-01-01’ đến ‘9999-12-31’.
DATETIME(): *Kết hợp ngày và giờ. Định dạng: YYYY-MM-DD HH:MI:SS
Lưu ý: Phạm vi được hỗ trợ là từ ‘1000-01-01 00:00:00’ đến ‘9999-12-31 23:59:59’
TIMESTAMP(): *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: YYYY-MM-DD HH:MI:SS
Lưu ý: Phạm vi được hỗ trợ là từ ‘1970-01-01 00:00:01’ UTC đến ‘2038-01-09 03:14:07’ UTC
TIME(): Thời gian. Định dạng: HH:MI:SS
Lưu ý: Phạm vi được hỗ trợ là từ ‘-838: 59: 59’ đến ‘838: 59: 59’
YEAR(): Một năm ở định dạng hai chữ số hoặc bốn chữ số.
Giá trị được cho phép ở định dạng gồm 4 chữ số: 1901 đến 2155.
Giá trị được cho phép ở định dạng gồm 2 chữ số: 70 đến 69, đại diện cho các năm từ 1970 đến 2069.
*Ngay cả khi DATETIME và TIMESTAMP trả về cùng một định dạng thì chúng vẫn hoạt động rất khác nhau. Trong truy vấn INSERT hoặc UPDATE, TIMESTAMP sẽ tự động đặt chính nó vào ngày và giờ hiện tại. TIMESTAMP cũng chấp nhận các định dạng khác nhau, như YYYYMMDDHHMISS, YYMMDDHHMISS, YYYYMMDD hoặc YYMMDD.
3. Các kiểu dữ liệu trong SQL Server
Kiểu dữ liệu chuỗi
Kiểu dữ liệu
Mô tả
Kích thước tối đa
Lưu trữ
char(n)
Chuỗi ký tự độ rộng cố định
8.000 ký tự
Độ rộng được xác định
varchar(n)
Chuỗi ký tự có độ rộng biến thiên
8.000 ký tự
2 byte số ký tự
varchar(max)
Chuỗi ký tự có độ rộng biến thiên
1.073.741.824 ký tự
2 byte số ký tự
text
Chuỗi ký tự có độ rộng biến thiên
2GB dữ liệu văn bản
4 byte số ký tự
nchar
Độ rộng chuỗi Unicode cố định
4.000 ký tự
Chiều rộng xác định x 2
nvarchar
Độ rộng chuỗi Unicode biến thiên
4.000 ký tự
nvarchar(max)
Độ rộng chuỗi Unicode biến thiên
536.870.912 ký tự
ntext
Độ rộng chuỗi Unicode biến thiên
2GB dữ liệu văn bản
binary(n)
Độ rộng chuỗi nhị phân thay đổi
8.000 byte
varbinary
Độ rộng chuỗi nhị phân thay đổi
8.000 byte
varbinary(max)
Độ rộng chuỗi nhị phân thay đổi
8GB
image
Độ rộng chuỗi nhị phân thay đổi
8GB
Kiểu dữ liệu số
Kiểu dữ liệu
Mô tả
Lưu trữ
bit
Số nguyên có thể là 0, 1 hoặc NULL
tinyint
Cho phép toàn bộ số từ 0 đến 255
1 byte
smallint
Cho phép toàn bộ số giữa -32,768 và 32,767
2 bytes
int
Cho phép toàn bộ số giữa -2,147,483,648 và 2,147,483,647
4 bytes
bigint
Cho phép toàn bộ số giữa -9,223,372,036,854,775,808 và 9,223,372,036,854,775,807
8 bytes
decimal(p,s)
Độ chính xác cố định và số lớn.
Cho phép số từ -10^38 1 đến 10^38 -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à một 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 ở bên phải 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 bytes
numeric(p,s)
Độ chính xác cố định và số lớn.
Cho phép số từ -10^38 1 đến 10^38 -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à một 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 ở bên phải 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 bytes
smallmoney
Dữ liệu tiền tệ từ -214,748.3648 đến 214,748.3647
4 bytes
money
Dữ liệu tiền tệ từ -922,337,203,685,477,5808 đến 922,337,203,685,477,5807
8 bytes
float(n)
Dữ liệu số chính xác biến thiên từ -1.79E 308 đến 1.79E 308.
Tham số n cho biết liệu trường có lưu trữ 4 hoặc 8 byte hay không. float (24) lưu trữ trường 4 byte và float (53) lưu trữ trường 8 byte. Giá trị mặc định của n là 53.
4 hoặc 8 bytes
real
Dữ liệu số chính xác biến thiên từ -3,40E 38 đến 3,40E 38
4 bytes
Các kiểu dữ liệu ngày tháng
Kiểu dữ liệu
Mô tả
Lưu trữ
datetime
Từ ngày 1 tháng 1 năm 1753 đến ngày 31 tháng 12 năm 9999 với độ chính xác 3,33 mili giây.
8 bytes
datetime2
Từ ngày 1 tháng 1 năm 0001 đến ngày 31 tháng 12 năm 9999 với độ chính xác 100 nano giây.
6-8 bytes
smalldatetime
Từ ngày 1 tháng 1 năm 1900 đến ngày 6 tháng 6 năm 2079 với độ chính xác là 1 phút.
4 bytes
date
Chỉ lưu trữ ngày. Từ ngày 1 tháng 1 năm 0001 đến ngày 31 tháng 12 năm 1999.
3 bytes
time
Chỉ lưu trữ thời gian với độ chính xác 100 nano giây.
3-5 bytes
datetimeoffset
Giống như datetime2 với việc bổ sung múi giờ.
8-10 bytes
timestamp
Lưu trữ một số duy nhất được cập nhật mỗi lần khi một hàng được tạo hoặc sửa đổi. Giá trị timestamp dựa trên đồng hồ nội bộ và không tương ứng với thời gian thực. Mỗi bảng có thể chỉ có một biến timestamp.
Các kiểu dữ liệu khác
sql_variant: Lưu trữ tối đa 8.000 byte dữ liệu của các kiểu dữ liệu khác nhau, ngoại trừ text, ntext và timestamp.
gianuniqueidentifier: Lưu trữ một định danh duy nhất toàn cầu (GUID)
xml: Lưu trữ dữ liệu định dạng XML. Tối đa 2 GB.
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 kết quả để xử lý sau.
Các kiểu dữ liệu truy cập của Microsoft
Kiểu dữ liệu
Mô tả
Lưu trữ
Text
Sử dụng cho văn bản hoặc kết hợp văn bản và số. Tối đa 255 ký tự.
Memo
Bản ghi nhớ được sử dụng cho số lượng văn bản lớn hơn. Lưu trữ tối đa 65.536 ký tự.
Lưu ý: Bạn không thể sắp xếp trường ghi nhớ. Tuy nhiên, chúng có thể tìm kiếm được.
Byte
Cho phép toàn bộ số từ 0 đến 255
1 byte
Integer
Cho phép toàn bộ số giữa -32,768 và 32,767
2 bytes
Long
Cho phép toàn bộ số giữa -2,147,483,648 và 2,147,483,647
4 bytes
Single
Single precision floating-point. Sẽ xử lý hầu hết các số thập phân
4 bytes
Double
Double precision floating-point. Sẽ xử lý hầu hết các số thập phân
8 bytes
Currency
Sử dụng cho tiền tệ. Lưu trữ lên đến 15 chữ số của toàn bộ đô la, cộng với 4 chữ số thập phân.
Mẹo: Bạn có thể chọn loại tiền tệ của một quốc gia.
8 bytes
AutoNumber
Các trường AutoNumber tự động cung cấp cho mỗi bản ghi số riêng của nó, thường bắt đầu từ 1.
4 bytes
Date/Time
Sử dụng cho ngày và giờ
8 bytes
Yes/No
Trường logic có thể được hiển thị là Yes/No, True/False, hoặc On/Off. Trong code, sử dụng các hằng số True và False (tương đương với -1 và 0).
Lưu ý: Các giá trị Null không được phép trong các trường Yes/No.
1 bit
Ole Object
Có thể lưu trữ hình ảnh, âm thanh, video hoặc các BLOB khác (Binary Large OBjects)
Upto 1 GB
Hyperlink
Chứa các liên kết đến các tệp khác, bao gồm các trang web
Lookup Winzard
Cho phép bạn nhập danh sách các tùy chọn, sau đó có thể được chọn từ danh sách thả xuống
4 bytes
Theo Bizfly Cloud chia sẻ
>> Tìm hiểu thêm: Sự khác nhau giữa SQL, MySQL và SQL Server