Cũng như các ngôn ngữ lập trình, hệ quản trị cơ sở dữ liệu MySql cũng có các kiểu dữ liệu. Vậy MySql bao gồm những kiểu dữ liệu nào, kiểu dữ liệu nào thường được hay dùng nhất chúng ta sẽ tìm hiểu trong bài viết này.
Các kiểu dữ liệu trong MySQL (Data Types)
MySQL bao gồm 3 kiểu dữ liệu chính đó là Kiểu dữ liệu chuỗi, Kiểu dữ liệu số, Kiểu dữ liệu ngày và giờ, trong đó mỗi kiểu dữ liệu chính sẽ lại chia nhỏ ra thành các kiểu dữ liệu con để phù hợp nhất với từng mục đích lưu trữ.
Kiểu dữ liệu chuỗi (String Types)
kiểu dữ liệu chuỗi gồm 6 dạng chính là CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT.
Kiểu dữ liệu CHAR và VARCHAR
CHAR(size): Một chuỗi có độ dài CỐ ĐỊNH có kích thước là size.
VARCHAR(size): Một chuỗi có thể thay đổi kích thước tùy vào dữ liệu lưu trữ, với kích thước tối đa là size.
Ví dụ như sau để bạn dễ hình dung hơn.
Mình có chuỗi “tuicocach.com“, chuỗi này bao gồm 13 ký tự, mình khai báo 2 bảng dữ liệu riêng biệt và sử dụng cột info để lưu trữ chuỗi như trên, nhưng ở hai bảng này một bảng mình dùng kiểu CHAR(100), và một bảng là kiểu VARCHAR(100), tức là cả 2 bảng đều có kích thước khai báo tối đa là 100. Tuy nhiên lúc này khi lưu trữ dữ liệu vào bảng, thì bảng số 1 lưu trữ chuỗi trên thì sẽ luôn luôn chiếm kích thước trong bộ nhớ là 100byte, còn bảng số 2 sử dụng kiểu dữ liệu VARCHAR lúc này kích thước bộ nhớ chỉ chiếm có 13byte.
>> XEM THÊM: Hiển thị CODE các ngôn ngữ lập trình trong bài viết WordPress
Kiểu dữ liệu BINARY và VARBINARY
BINARY(size): Bằng với CHAR (), nhưng lưu trữ chuỗi byte dưới dạng nhị phân.
VARBINARY(size): Bằng với VARCHAR (), nhưng lưu trữ chuỗi byte dưới dạng nhị phân..
Kiểu dữ liệu BLOB và TEXT
TINYBLOB:
- Dành cho BLOB (Binary Large Objects).
- Độ 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):
- Dành cho BLOB (Binary Large Objects). 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:
- Dành cho BLOB (Binary Large Objects). 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:
- Dành cho BLOB (Binary Large Objects). 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 65535 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ự bạn 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ể.
- Bạn có thể liệt kê tối đa 64 giá trị trong danh sách SET.
2. Kiểu dữ liệu số (Numeric Data Types)
Các kiểu dữ liệu số bao gồm 2 dạng là:Kiểu dữ liệu số nguyên, Kiểu dữ liệu số thực.
Kiểu dữ liệu số nguyên
BIT(size): Kiểu giá trị bit. Số lượng bit trên mỗi giá trị được chỉ định rõ về kích thước. Tham số kích thước có thể giữ giá trị từ 1 đến 64. Giá trị mặc định cho kích thước là 1.
TINYINT(size): Một số nguyên rất nhỏ. Phạm vi đã ký là từ -128 đến 127. Phạm vi chưa ký là từ 0 đến 255. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
BOOL: Số 0 được coi là sai, các giá trị khác 0 được coi là đúng.
BOOLEAN: Tương đương với BOOL.
SMALLINT(size): Một số nguyên nhỏ. Dải ô đã ký là từ -32768 đến 32767. Dải ô chưa ký là từ 0 đến 65535. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
MEDIUMINT(size): Một số nguyên trung bình. Dải ô đã ký là từ -8388608 đến 8388607. Dải ô chưa ký là từ 0 đến 16777215. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
INT(size): Một số nguyên trung bình. Dải ô đã ký là từ -2147483648 đến 2147483647. Dải ô chưa ký là từ 0 đến 4294967295. Tham số kích thước 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. Dải ô đã ký là từ -9223372036854775808 đến 9223372036854775807. Dải ô chưa ký là từ 0 đến 18446744073709551615. Tham số kích thước chỉ định chiều rộng hiển thị tối đa (là 255).
Kiểu dữ liệu số thực
FLOAT(size, d):
- Một số dấu phẩy động. Tổng số chữ số được chỉ định về kích thước.
- 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ố dấu phẩy động.
- 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ố dấu phẩy động có kích thước thông thường.
- Tổng số chữ số được chỉ định về kích thước. 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ố điểm cố định chính xác.
- Tổng số chữ số được chỉ định về kích thước.
- Số chữ số sau dấu thập phân được chỉ định trong tham số d. Số tối đa cho kích thước là 65. Số lớn nhất cho d là 30.
- Giá trị mặc định cho kích thước là 10. Giá trị mặc định cho d là 0.
DEC(size, d): Bằng với DECIMAL(size,d).
>>XEM THÊM: MySql là gì? Tìm hiểu về hệ quản trị cơ sở dữ liệu MySql
3. Kiểu dữ liệu ngày và giờ (Date and Time)
Các kiểu dữ liệu ngày và giờ trong MySQL cần lưu ý về định dạng và phạm vi được hỗ trợ.
Kiểu dữ liệu DATE
- Dữ liệu ngày tháng.
- Định dạng: YYYY-MM-DD.
- Phạm vi được hỗ trợ là từ ‘1000-01-01’ đến ‘9999-12-31’.
Kiểu dữ liệu DATETIME(fsp)
- Ngày và giờ kết hợp.
- Định dạng: 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.
Kiểu dữ liệu TIMESTAMP(fsp)
- Dấu thời gian.
- Giá trị TIMESTAMP được lưu trữ dưới dạng số giây kể từ kỷ nguyên Unix (‘1970-01-01 00:00:00’ UTC).
- Định dạng: YYYY-MM-DD hh: mm: ss.
- Phạm vi được hỗ trợ là 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.
Kiểu dữ liệu TIME(fsp)
- Dữ liệu thời gian.
- Định dạng: hh: mm: ss.
- Phạm vi được hỗ trợ là từ ‘-838: 59: 59’ đến ‘838: 59: 59’.
Kiểu dữ liệu YEAR
- Một năm ở định dạng bốn chữ số.
- Các giá trị được phép ở định dạng bốn chữ số: 1901 đến 2155 và 0000.
- Kiểu dữ liệu trong MySQL 8.0 không hỗ trợ năm ở định dạng hai chữ số.
>>XEM THÊM: Câu lệnh SELECT trong MySql
Bảng tổng hợp các kiểu dữ liệu trong MySQL
Mình sẽ tổng hợp lại các kiểu dữ liệu trong MySQL dưới dạng bảng để tiện theo dõi hơn.
Kiểu dữ liệu chuỗi
Các loại chuỗi | Sự mô tả |
---|---|
CHAR | Một chuỗi có độ dài cố định |
VARCHAR | Một chuỗi có độ dài thay đổi |
BINARY | Một chuỗi nhị phân có độ dài cố định |
VARBINARY | Một chuỗi nhị phân có độ dài thay đổi |
TINYBLOB | Một BLOB rất nhỏ (đối tượng lớn nhị phân) |
BLOB | Một BLOB nhỏ |
MEDIUMBLOB | BLOB cỡ vừa |
LONGBLOB | BLOB lớn |
TINYTEXT | Một chuỗi không phải nhị phân rất nhỏ |
TEXT | Một chuỗi nhỏ không phải nhị phân |
MEDIUMTEXT | Một chuỗi không phải nhị phân có kích thước trung bình |
LONGTEXT | Một chuỗi không nhị phân lớn |
ENUM | Một bảng kê; mỗi giá trị cột có thể được chỉ định một thành viên liệt kê |
SET | Một bộ; mỗi giá trị cột có thể được gán không hoặc nhiều SET thành viên |
Kiểu dữ liệu số
Các loại ngày và giờ | Sự mô tả |
---|---|
DATE | Giá trị ngày ở CCYY-MM-DD định dạng |
TIME | Giá trị thời gian ở hh:mm:ss định dạng |
DATETIME | Giá trị ngày và giờ ở CCYY-MM-DD hh:mm:ss định dạng |
TIMESTAMP | Một giá trị dấu thời gian ở CCYY-MM-DD hh:mm:ss định dạng |
YEAR | Giá trị năm ở dạng CCYY hoặc YY định dạng |
Kiểu dữ liệu ngày và giờ
Các kiểu dữ liệu không gian | Sự mô tả |
---|---|
GEOMETRY | Giá trị không gian thuộc bất kỳ loại nào |
POINT | Một điểm (một cặp tọa độ XY) |
LINESTRING | Đường cong (một hoặc nhiều POINT giá trị) |
POLYGON | Một đa giác |
GEOMETRYCOLLECTION | Một tập hợp các GEOMETRY giá trị |
MULTILINESTRING | Một tập hợp các LINESTRING giá trị |
MULTIPOINT | Một tập hợp các POINT giá trị |
MULTIPOLYGON | Một tập hợp các POLYGON giá trị |
[XEM TẤT CẢ BÀI VIẾT VỀ PHP & MYSQL TẠI ĐÂY]
XEM THÊM Lệnh DELETE trong MySQL – Lệnh xóa bản ghi Tìm hiểu thuộc tính AUTO_INCREMENT trong MySQL – Giá trị tự tăng dần Câu lệnh CREATE TABLE trong MySQL – Lệnh tạo bảng mới Câu lệnh INSERT INTO trong MySQL – Lệnh chèn dữ liệu vào bảng Mệnh đề WHERE trong MySQL – Mệnh đề điều kiện