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 |