07. Kiểu dữ liệu

Kiểu dữ liệu trong SQL định nghĩa một kiểu giá trị mà một cột có thể chứa. Trong một bảng, mỗi cột cần có một tên và một kiểu dữ liệu. Kiểu dữ liệu thì khá đa dạng với các Database khác nhau.

Trong khuôn khổ bài học này tôi sẽ giới thiệu tới bạn các kiểu dữ liệu của ba cơ sở dữ liệu hay dùng là Microsoft Access, SQL Server và MySQL.

Kiểu dữ liệu của MySQL

Trong MySQL có ba kiểu dữ liệu chính: text, số và ngày/giờ.

Kiểu dữ liệu SQL dạng text:

STT

Kiểu dữ liệu

Mô tả

1

CHAR(size) Giữ một chuỗi có chiều dài cố định (có thể chứa chữ, số và các ký tự đặc biệt). “size” là kích thước cố định của chuỗi và có thể lên tới tối đa 255 ký tự

2

VARCHAR(size) Giữ một chuỗi mà chiều dài có thể thay đổi được (có thể chứa chữ, số, và các ký tự đặc biệt (@,$ …)). Kích thước tối đa có thể chứa là 255 ký tự.

Chú ý: Nếu nhập vào lớn hơn 255 ký tự, thì VARCHAR sẽ được chuyển thành dữ liệu loại TEXT

3

TINYTEXT Giữ một chuỗi với độ dài tối đa là 255 ký tự

Chú ý: TINYTEXT có đôi chút khác biệt với VARCHAR, đó là độ dài tối đa của VARCHAR có thể thay đổi được dựa vào biến “size” nhưng độ dài tối đa của TINYTEXT luôn luôn cố định, không  thay đổi được, bạn có thể tham khảo thêm sự khác biệt này ở các link sau :Sự khác biệt giữa TINYTEXT với VARCHAR trong SQL (MYSQL)

4

TEXT Giữ một chuỗi với chiều dài tối đa lên tới 65,535 ký tự

5

BLOB BLOB (Binary Large OBjects), có thể giữ dữ liệu có kích thước lên tới 65,535 byte

6

MEDIUMTEXT Có thể giữ một một chuỗi với với độ dài tối đa là 16,777,215 ký tự

7

MEDIUMBLOB Có thể giữ dữ liệu có kích thước lên tới 16,777,215 byte

8

LONGTEXT Giữ một chuỗi có độ dài tối đa có thể lên tới 4,292,967,295 ký tự

9

LONGBLOB Có thể giữ dữ liệu có kích thước tối đa lên tới 4,292,967,295 byte

10

ENUM(x,y,z,etc) Khi định nghĩa một trường kiểu này, tức là, ta đã chỉ ra một danh sách các đối tượng mà trường phải nhận (có thể là Null). Ví dụ, nếu ta muốn một trường nào đó chỉ nhận một trong các giá trị “A” hoặc “B” hoặc “C” thì ta phải định nghĩa kiểu ENUM cho nó như sau: ENUM (‘A’, ‘B’, ‘C’). Và chỉ có các giá trị này (hoặc NULL) có thể xuất hiện trong trường đó.

11

SET SET là 1 đối tượng chuỗi có thể không có hoặc có nhiều giá trị, mỗi giá trị này phải được chọn từ 1 danh sách các giá trị được khai báo trước khi bảng được tạo. Trong trường hợp có nhiều giá trị, các giá trị của SET được phân biệt bởi dấu phẩy (“,”), hệ quả của việc này là các giá trị của SET tự nó không được chứa dấu phẩy.

Ví dụ: 1 cột được đặc tả là SET(‘one’, ‘two’) NOT NULL có thể có bất kỳ giá trị nào trong các giá trị: ‘ ‘, ‘one’, ‘two’, ‘one, two’.

Điểm khác biệt giữa SET và ENUM đó là:

– SET có thể có tối đa 64 phần tử khác nhau.

– SET có thể chứa nhiều hơn một lựa chọn trong khi ENUM chỉ có thể có một lựa chọn.

Ví dụ: Ta có SET(‘one’, ‘two’) và ENUM(‘a, ‘b’) thì 1 cột được đặc tả là SET(‘one’, ‘two’) có thể có giá trị là ‘one,two’, nhưng một cột có đặc tả là  ENUM(‘a, ‘b’) thì không thể có giá trị là ‘a,b’ mà chỉ có thể ‘a’ hoặc ‘b’ hoặc NULL

Kiểu dữ liệu SQL dạng số:

STT

Kiểu dữ liệu

Mô tả

1

TINYINT(size)

size: số lớn nhất của số các chứ số (chiều dài)

Số có dấu: -128 -> 127

Số không dấu (UNSIGNED): 0 -> 255

2

SMALLINT(size)

size: số lớn nhất của số các chứ số (chiều dài)

Số có dấu: -32,768 -> 32,768

Số không dấu (UNSIGNED): 0 -> 65535

3

MEDIUMINT(size)

size: số lớn nhất của số các chứ số (chiều dài)

Số có dấu: -8388608 -> 8388607

Số không dấu: 0 -> 16,777,215

4

INT(size)

size: số lớn nhất của số các chứ số (chiều dài)

Số có dấu: -2,147,483,648 -> 2,147,483,647

Số không dấu: 0 -> 4,294,967,295

5

BIGINT(size)

size: số lớn nhất của số các chứ số (chiều dài)

Số có dấu: -9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807

Số không dấu: 0 -> 18,446,744,073,709,551,615

6

FLOAT(size,d)

Một số thực dấu phẩy động không có dạng không dấu(UNSIGNED). Bạn có thể định nghĩa độ dài hiển thị (size) và số vị trí sau dấy phảy (d). Điều này là không bắt buộc và sẽ có mặc định là 10,2: với 2 là số vị trí sau dấu phảy và 10 là số chữ số (bao gồm các phần thập phân). Phần thập phân có thể lên tới 24 vị trí sau dấu phảy đối với một số FLOAT.

7

DOUBLE(size,d)

Một số thực dấu phẩy động có độ chính xác kép không có dạng không dấu (UNSIGNED). Bạn có thể định nghĩa độ dài hiển thị (size) và số vị trí sau dấy phảy (d). Điều này là không bắt buộc và sẽ có mặc định là 16,4: với 4 là số vị trí sau dấu phảy và 16 là số chữ số (bao gồm các phần thập phân). Phần thập phân có thể lên tới 53 vị trí sau dấu phảy đối với một số DOUBLE. REAL là đồng nghĩa với DOUBLE.

8

DECIMAL(size,d)

Số thực dấu phẩy dộng không nén, không có dạng không dấu (UNSIGNED). Mỗi chữ số thập phân chiếm 1 byte. Việc định nghĩa độ dài hiển thị (size) và số vị trí sau dấy phảy (d) là bắt buộc.

Kiểu dữ liệu SQL dạng date:

STT

Kiểu dữ liệu

Mô tả

1

DATE()

Định dạng: YYYY-MM-DD (Year-Month-Date)

Dải hỗ trợ từ 1000-01-01 tới 9999-12-31

2

DATETIME()

Định dạng: YYYY-MM-DD HH:MM:SS (Hour:Minute:Second)

Dải hỗ trợ từ 1000-01-01 00:00:00 UTC tới 9999-12-31 23:59:59 UTC

3

TIMESTAMP()

Định dạng: YYYY-MM-DD HH:MM:SS

Dải hỗ trợ: 1970-01-01 00:00:01 UTC tới 2038-01-09 03:14:07 UTC

Trông khá giống với định dạng DATETIME trước, khác biệt ở chỗ không có dấu gạch nối giữa các số. Ví dụ, 3:30 chiều ngày 7 tháng 11, năm 2038 sẽ được lưu dưới dạng 20381107153000 ( YYYYMMDDHHMMSS ).

4

TIME()

Định dạng: HH:MM:SS

Dải hỗ trợ: -838:59:59 to 838:59:59

5

YEAR()

Lưu 1 năm trong định dạng 2 chữ số hoặc 4 chữ số. Nếu độ dài được xác định là 2 (ví dụ: YEAR(2)), YEAR có thể từ 1970 tới 2069 (70 tới 69). Nếu độ dài được xác định là 4, YEAR có thể từ 1901 tới 2155. Độ dài mặc định là 4

Chú ý:

DATETIME và TIMESTAMP tuy trả về cùng định dạng kiểu dữ liệu nhưng hoạt động của chúng là khác nhau.

Khi thực hiện một truy vấn INSERT hoặc UPDATE, TIMESTAMP tự động cập nhật ngày giờ hiện tại của lúc đó. DATETIME thì không. TIMESTAMP cũng chấp nhận nhiều định dạng khác nhau hơn như: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD hoặc YYMMDD

Kiểu dữ liệu của Microsoft Access

Kiểu dữ liệu

Mô tả

Kích thước

Text

Tối đa 255 ký tự bao gồm cả chữ và số

Memo

Memo dùng cho số lượng ký tự text lớn hơn. Có thể lên tới 65,536 ký tự

Chú ý: Bạn không thể sắp xếp lại một tệp tin memo. Tuy vậy, ta hoàn toàn có thể tìm kiếm chúng được.

Byte

Cho phép toàn bộ các số từ 0 tới 255

1 byte

Integer

Từ -32,768 tới  32767

2 bytes

Long

Từ -2,147,438,648 tới -2,147,438,647

4 bytes

Single

Số thực dấu phẩy dộng độ chính xác đơn

4 bytes

Double

Số thực dấu phẩy động độ chính xác kép

8 bytes

Currency

Sử dụng cho tiền tệ. Giữ giá trị lên tới 15 chữ số cộng với 4 vị trí thập phân (sau dấu phẩy)

Chú ý: Bạn có thể chọn tiền tệ theo tùy từng quốc gia

8 bytes

AutoNumber

Một trường được cho là AutoNumber, nó tự động thêm vào bản ghi một giá trị số của nó và thường bắt đầu từ 1.

4 bytes

Date/Time

Dùng cho ngày và giờ

8 bytes

Yes/No

Giá trị NULL không được cho phép trong các trường Yes/No.

Và nó có thể hiển thị như là : Yes/No, True/False, On/Off. Trong mã nguồn, ta hay sử dụng True/False (tương đương với -1 và 0)

1 bit

Ole Object

Có thể chứa ảnh, audio, video hoặc các BLOB khác (Binary Large Objects)

Nên tới 1 GB

Hyperlink

Chứa đường dẫn tới tệp tin khác, bao gồm cả các đường dẫn tới các trang web

Lookup Wizard

Cho phép bạn nhập vào một danh sách các lựa chọn (drop-down list)

4 bytes

Kiểu dữ liệu SQL Server

Các chuỗi ký tự:

Kiểu dữ liệu

Mô tả

Kích thước

char(n)

Chuỗi các ký tự có chiều dài cố định. Tối đa 8000 ký tự

n

varchar(n)

Chuỗi các ký tự có chiều dài thay đổi. Tối đa 8000 ký tự

varchar(max)

Chuối các ký tự có chiều dài thay đổi. Tối đa 1,073,741,824 ký tự

Text

Chuỗi các ký tự có chiều dài thay đổi. Tối đa 2GB dữ liệu text.

Các chuỗi Unicode:

Kiểu dữ liệu

Mô tả

Kích thước

nchar(n)

Dữ liệu Unicode có chiều dài cố định Tối đa 4000 ký tự

nvarchar(n)

Dữ liệu Unicode có chiều dài thay đổi Tối đa 4000 ký tự

nvarchar(max)

Dữ liệu Unicode có chiều dài thay đổi Tối đa 536,870,912 ký tự

ntext

Dữ liệu Unicode có chiều dài thay đổi

Tối đa 2GB dữ liệu text

Kiểu dữ liệu Binary:

Kiểu dữ liệu

Mô tả

Kích thước

bit

Cho phép 1, 0 hoặc NULL

binary(n)

Dữ liệu binary có chiều dài cố định Tối đa 8000 bytes

varbinary(n)

Dữ liệu binary có chiều dài có thể thay đổi được Tối đa 8000 bytes

varbinary(max)

Dữ liệu binary có chiều dài có thể thay đổi được Tối đa 2GB dữ liệu

image

Dữ liệu binary có chiều dài có thể thay đổi được Tối đa 2GB dữ liệu

Dữ liệu dạng số:

Kiểu dữ liệu

Mô tả

Kích thước bộ nhớ

tinyint

Từ 0 tới 255 1 byte

smallint

Từ -32,768 tới 32,767 2 bytes

int

Từ -2,147,483,648 tới 2,147,483,647 4 bytes

bigint

Từ -9,223,372,036,854,775,808 tới 9,223,372,036,854,775,807 8 bytes

decimal(p,s)

Từ -10^38 +1 tới 10^38 -1

p: Chiều dài lớn nhất của các chữ số tính cả phần bên trái và phần bên phải dấu phẩy của số thập phân. Giá trị nằm trong dải từ 1 tới 38, giá trị mặc định là 18

s: Chiều dài lớn nhất của các chữ số nằm ở phía bên phải dấu phẩy. Giá trị nằm trong dải từ 0 tới p, giá trị mặc định là 0

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *