Các kiểu dữ liệu trong SQL

Bài viết liên quan

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!

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


>> Có thể bạn quan tâm: Cách tạo, thêm và xóa các ràng buộc duy nhất trong SQL Server

Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration