Câu trả lời:
Các kiểu dữ liệu này là từ đồng nghĩa.
Tôi sẽ thực hiện một cách tiếp cận khác ở đây và gợi ý rằng điều quan trọng đối với các nhà phát triển đồng nghiệp của bạn là hiểu mã của bạn cũng như đối với trình biên dịch / cơ sở dữ liệu. Sử dụng boolean có thể làm điều tương tự như sử dụng tinyint, tuy nhiên nó có lợi thế là truyền đạt ngữ nghĩa ý định của bạn là gì và điều đó đáng giá.
Nếu bạn sử dụng tinyint, không rõ ràng rằng các giá trị duy nhất bạn sẽ thấy là 0 và 1. Boolean LUÔN LUÔN đúng hay sai.
boolean
không phải là một kiểu dữ liệu riêng biệt trong MySQL; nó chỉ là một từ đồng nghĩa với tinyint
. Xem trang này trong hướng dẫn sử dụng MySQL .
Cá nhân tôi khuyên bạn nên sử dụng tinyint như một tùy chọn, bởi vì boolean không làm những gì bạn nghĩ nó làm từ tên, vì vậy nó tạo ra mã có khả năng gây hiểu lầm. Nhưng ở cấp độ thực tế, điều đó thực sự không quan trọng - cả hai đều làm điều tương tự, vì vậy bạn sẽ không đạt được hay mất gì khi sử dụng cả hai.
sử dụng enum dễ dàng và nhanh nhất
tôi sẽ không đề xuất enum hoặc tinyint (1) vì bit (1) chỉ cần 1 bit để lưu trữ giá trị boolean trong khi tinyint (1) cần 8 bit.
ref
TINYINT so với ENUM (0, 1) cho các giá trị boolean trong MySQL
BIT(M) - approximately (M+7)/8 bytes
hãy xem: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Trong khi đó là sự thật mà bool
và tinyint(1)
là chức năng giống hệt nhau, bool
nên là lựa chọn ưa thích vì nó mang ý nghĩa ngữ nghĩa của những gì bạn đang cố gắng làm. Ngoài ra, nhiều ORM sẽ chuyển đổi bool
thành kiểu boolean bản địa của ngôn ngữ lập trình của bạn.
Kinh nghiệm của tôi khi sử dụng Dapper để kết nối với MySQL là nó rất quan trọng . Tôi đã thay đổi một bit không nullable (1) thành tinyint (1) có thể nullable bằng cách sử dụng tập lệnh sau:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Sau đó Dapper bắt đầu ném Exceptions. Tôi đã cố gắng xem xét sự khác biệt trước và sau khi viết kịch bản. Và nhận thấy rằng bit (1) đã thay đổi thành tinyint (1).
Sau đó tôi chạy:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Mà đã giải quyết được vấn đề.
boolean
nhưtinyint(1)
. Vì vậy, bạn có thể sử dụngboolean
,true
vàfalse
và xử lý MySQL chúng nhưtinyint(1)
,1
và0
.