Các kiểu dữ liệu trong MySQL cần được xác định một cách chính xác để hệ cơ sở dữ liệu vận hành một cách trơn tru. Khi làm việc trên hệ thống quản trị cơ sở dữ liệu MySQL, bạn sẽ phải quản lý một lượng dữ liệu khổng lồ. Các dữ liệu trên hệ thống sẽ được phân loại thành những kiểu dữ liệu đa dạng, tương ứng với kích thước bộ nhớ dữ liệu khác nhau. Cùng kienthucphanmem.com tìm hiểu rõ hơn về các kiểu dữ liệu được quy định trong MySQL nhé.
Tổng quan về các kiểu dữ liệu trong MySQL
Kiểu dữ liệu (Data type) là gì?
Kiểu dữ liệu là quy định về miền giá trị và cấu trúc của dữ liệu có thể được nhập vào. Cùng với đó là các toán tử, phép toán có khả năng làm thay đổi miền giá trị của dữ liệu đó. Cũng giống như mỗi ngôn ngữ lập trình khác nhau sẽ được áp dụng các quy định khác nhau. Mỗi dữ liệu cũng được phân loại thành từng kiểu dữ liệu riêng.
Có một số đặc điểm về kiểu dữ liệu mà bạn cần lưu ý:
- Kiểu dữ liệu là yếu tố ảnh hưởng tới kích thước bộ nhớ dữ liệu mà trường có thể sử dụng
- Tiêu chuẩn xây dựng kiểu dữ liệu được cung cấp bởi ANSI/ISO
- Các hệ thống quản trị cơ sở dữ liệu thương mại hiện nay sử dụng 16 trên tổng số 143 kiểu dữ liệu phổ biến
- Dạng dữ liệu được chỉ định trong mỗi trường (column) chính là thuộc tính của dữ liệu
Xác định kiểu dữ liệu có vai trò gì?
Xác định đúng kiểu dữ liệu và các trường đóng vai trò vô cùng thiết yếu trong việc tối ưu hóa tổng thể cơ sở dữ liệu trên MySQL. Cụ thể, cơ sở dữ liệu sẽ gặp nhiều trục trặc nếu bạn áp dụng kiểu dữ liệu 2 ký tự cho dữ liệu cần tối thiểu 10 ký tự. Mặt khác, nếu sử dụng loại dữ liệu rộng tới 10 ký tự cho trường 2 ký tự thì cơ sở dữ liệu của bạn sẽ nhanh chóng bị quá tải.
Các kiểu dữ liệu trong MySQL bao gồm những gì?
MySQL cung cấp tổng cộng 11 kiểu dữ liệu khác nhau. Từ 11 kiểu dữ liệu này, chúng ta có thể phân chia thành ba nhóm lớn đó là: Kiểu dữ liệu chuỗi (String Data Types), Kiểu dữ liệu ngày và thời gian (Date and Time Data Types) và Kiểu dữ liệu số (Numeric Data Types).
Kiểu dữ liệu số (Numeric Data Types)
Kiểu dữ liệu số nguyên
MySQL có 2 kiểu số dữ liệu số nguyên tiêu chuẩn là SMALLINT và INTEGER (or INT). Bên cạnh đó còn có các kiểu số nguyên khác gồm BIGINT, MEDIUMINT hay TINYINT. Sau đây là thông tin chi tiết về từng kiểu dữ liệu:
Kiểu dữ liệu số thực
Kiểu dữ liệu số thực còn được gọi là kiểu dấu chấm động (Floating-Point Types), bao gồm hai kiểu dữ liệu là DOUBLE và FLOAT. Những data type này mô tả gần như chính xác giá trị của các số thực. Dưới đây bạn có thể tìm thấy quy định về độ dài, giá trị lớn nhất và nhỏ nhất của hai kiểu dữ liệu này:
Kiểu dữ liệu dấu chấm cố định
Kiểu dữ liệu này còn có tên gọi là “Fixed-Point Types”, được dùng để đảm bảo tính chính xác của dữ liệu. Kiểu dữ liệu dấu chấm cố định cho phép lưu trữ dữ liệu dưới định dạng nhị phân, được áp dụng cho tiền tệ hay đơn giá. Vì vậy đây còn được gọi là kiểu dữ liệu tiền tệ trong MySQL.
Có 2 loại Fixed-Point Data Types chính đó là:
- DECIMAL: có độ dài tối đa 65, lưu trữ dữ liệu theo định dạng nhị phân
- NUMERIC: độ dài từ -999.99 đến 999.99, lưu trữ dữ liệu số một cách chính xác
Ví dụ: Khi viết Decimal (5,2) tức là kiểu dữ liệu này có thể lưu trữ giá trị gồm 5 chữ số (trong đó 2 số là số thập phân)
Kiểu dữ liệu Bit
Trong số các kiểu dữ liệu trong MySQL, kiểu dữ liệu BIT trong MySQL (Bit Value Types) được sử dụng khi lưu trữ các trường tương ứng với giá trị bit, phạm vi của kiểu dữ liệu này là 1 – 64.
Kiểu số và kiểu thuộc tính
Đây là hai kiểu dữ liệu mở rộng có khả năng điều chỉnh độ dài hiển thị trong ngoặc nằm sau từ khóa. Hai kiểu dữ liệu chính là:
- TYPE(N): ký tự N tượng trưng cho số nguyên và có thể chứa được N chữ số
- ZEROFILL: với kiểu dữ liệu này, số 0 sẽ được dùng để thay cho các khoảng đệm. Ví dụ: nếu viết INT(5) ZEROFILL thì dữ liệu sẽ được hiển thị là 00005
Kiểu dữ liệu ngày tháng và thời gian (Date and Time Data Types)
Các kiểu dữ liệu Date and Time sẽ gồm 5 kiểu chính đó là YEAR, TIMESTAMP, DATETIME, TIME và DATE.
Kiểu dữ liệu DATE
- Kiểu dữ liệu này chỉ cho phép bạn lưu trữ các dữ liệu liên quan tới ngày tháng.
- Hiển thị dưới dạng: YYYY-MM-DD
- Giới hạn thời gian: từ ‘1000-01-01 00:00:00’ đến ‘9999-12-31’
Kiểu dữ liệu DATETIME
- Kiểu dữ liệu này được áp dụng khi bạn muốn lưu trữ các dữ liệu về ngày tháng và thời gian.
- Hiển thị dưới dạng: YYYY-MM-DD HH:MM:SS
- Giới hạn thời gian: từ ‘1000-01-01 00:00:00’ đến ‘9999-12-31 23:59:59’
Kiểu dữ liệu TIMESTAMP
- Là một trong các kiểu dữ liệu trong MySQL được áp dụng khi bạn chỉ muốn lưu trữ thông tin về thời gian
- Hiển thị dưới dạng: HH:MM:SS
- Giới hạn thời gian: từ ‘-838:59:59’ đến ‘838:59:59’
Lưu ý:
- Kiểu dữ liệu TIME không chỉ được dùng để thể hiện thời gian 24 tiếng trong một ngày mà nó còn là khoảng thời gian giữa hai sự kiện, thời gian đã qua. Vì vậy giá trị thời gian có thể nhiều hơn 24 tiếng hay thậm chí được biểu thị bằng giá trị âm.
- Như vậy ta thấy có điểm khác biệt lớn giữa hai kiểu dữ liệu TIMESTAMP và DATETIME. Kiểu dữ liệu DATETIME luôn được giữ nguyên. Còn kiểu TIMESTAMP khi lưu trữ có thể được chuyển từ múi giờ hiện tại thành UTC và lúc trích xuất dữ liệu thì được chuyển ngược lại từ UTC thành múi giờ hiện tại.
Kiểu dữ liệu YEAR
Kiểu dữ liệu YEAR được mô tả giá trị bằng 1-byte. Có 2 kiểu dữ liệu YEAR là:
YEAR(2)
- Chiều rộng hiển thị: 2 ký tự
- Hiển thị dưới dạng: 2 số cuối cùng của năm
- Giới hạn: từ ‘0’ đến ’99’
YEAR(4)
- Chiều rộng hiển thị: 4 ký tự
- Hiển thị dưới dạng: YYYY
- Giới hạn: ‘1901’ đến ‘2155’
Kiểu dữ liệu chuỗi (String Data Types)
Kiểu dữ liệu chuỗi (String Types) sẽ bao gồm 8 kiểu dữ liệu phổ biến đó là: CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM và SET.
CHAR và VARCHAR
CHAR và VARCHAR tương tự nhau ở khía cạnh dữ liệu. Tuy nhiên cách lưu trữ và truy xuất dữ liệu đối với các kiểu dữ liệu trong MySQL này lại có sự khác biệt nằm ở khoảng trống phía trước (trailing space) và chiều dài tối đa.
CHAR
- Bao gồm chuỗi không ở dưới dạng nhị phân (non-binary)
- Không có khoảng trắng phía trước
- Độ dài cố định
- Phạm vi các ký tự dao động từ ‘0’ đến ‘255’.
VARCHAR
- Bao gồm chuỗi không ở dưới dạng nhị phân
- Có khoảng trắng phía trước
- Độ dài thay đổi
- Phạm vi các ký tự dao động từ ‘0’ đến ‘65535’.
BINARY và VARBINARY
Hai kiểu dữ liệu BINARY và VARBINARY giá giống với CHAR và VARCHAR. Tuy nhiên các kiểu dữ liệu BINARY trong MySQL và VARBINARY cho phép chứa các chuỗi nhị phân (binary strings).
- BINARY: phạm vi các ký tự dao động từ ‘0’ đến ‘255’
- VARBINARY: phạm vi các ký tự dao động từ ‘0’ đến ‘65535’ đối với bản MySQL từ 5.0.3 trở lên, phạm vi từ ‘0’ đến ‘255’ đối với bản MySQL từ 5.0.3 trở về trước.
BLOB và TEXT
- BLOB: là một “Binary Large Object” (đối tượng nhị phân lớn. Kiểu dữ liệu này cho phép chứa một lượng dữ liệu lớn, với 4 kiểu BLOB là TINYBLOB, BLOB, MEDIUMBLOB và LONGBLOB.
- TEXT: dùng để lưu trữ dữ liệu được coi như một chuỗi các ký tự có mã hóa (được gọi là character set). Cũng giống như BLOB, có 4 kiểu TEXT đó là TINYTEXT, TEXT, MEDIUMTEXT và LONGTEXT.
Kiểu dữ liệu ENUM
Khi một trường được áp dụng kiểu dữ liệu ENUM tức là bạn đã xác định một danh sách các đối tượng trường đó phải nhận (có thể là Null).
Ví dụ, nếu muốn chỉ định một trường chỉ nhận 1 trong các giá trị là A, B hoặc C. Bạn phải định nghĩa trường đó là ENUM (‘A’, ‘B’, ‘C’). Như vậy, trong trường này sẽ chỉ xuất hiện 1 trong 3 giá trị trên (hoặc NULL).
Những câu hỏi thường gặp về các kiểu dữ liệu trong MySQL
Kiểu dữ liệu hình ảnh trong MySQL là gì?
Kiểu dữ liệu hình ảnh trong MySQL là BLOB. BLOB (đối tượng lớn binary) là kiểu dữ liệu có khả năng chứa lượng lớn dữ liệu. Kiểu dữ liệu này cho phép lưu trữ các dữ liệu binary bao gồm file PDF, file đa phương tiện và cả hình ảnh.
Kiểu dữ liệu số điện thoại trong SQL là gì?
Kiểu dữ liệu số điện thoại trong SQL là CHAR (10), VARCHAR (15), VARCHAR (22)… Bạn có thể điều chỉnh sao cho phù hợp với độ dài của số điện thoại.
Làm thế nào để sửa kiểu dữ liệu trong MySQL
Để sửa kiểu dữ liệu trong MySQL, bạn nhập cú pháp như sau:
ALTER TABLE table_name MODIFY column_name COLUMN_TYPE
Trên đây là tổng hợp tất cả các kiểu dữ liệu trong MySQL mà bạn nên biết. Khi nắm được đặc điểm của từng kiểu dữ liệu, công việc quản trị cơ sở dữ liệu của bạn sẽ trở nên dễ dàng hơn. Hy vọng rằng bài viết trên đây đã giúp ích cho bạn và đừng quên tham khảo thêm các bài viết có chủ đề tương tự trên Kiến Thức Phần Mềm nhé.