Câu trả lời:
Cá nhân, tôi sẽ sử dụng BOOLEAN
cho một giá trị boolean. Nhưng hãy nhớ rằng hãy cẩn thận rằng trong MySQL, BOOLEAN
chỉ là một từ đồng nghĩa của TINYINT(1)
[src] .
Tất nhiên, điều này có nghĩa là bạn có thể có các giá trị khác 0 hoặc 1 nếu bạn không cẩn thận. Để tránh điều này, bạn có thể sử dụng các bí danh TRUE
và FALSE
khi chèn và cập nhật dữ liệu, tương ứng với các bản đồ thành 1 và 0.
Để hoàn thành, trước 5.0.3, BIT
cũng là một từ đồng nghĩa với TINYINT(1)
.
Nếu tôi hiểu chính xác, BOOLESE luôn sử dụng 1 byte cho mỗi cột nhưng BIT (n) sẽ sử dụng ít byte cần thiết để giữ số bit đã cho.
Vì vậy, BIT có thể tiết kiệm một số không gian, nhưng BOOLESE dễ làm việc hơn nếu bạn cần truy vấn chúng bằng SQL.
Nếu tôi có một bộ cờ được một ứng dụng hiểu và được lưu trữ trong một trường duy nhất trong ứng dụng, thì tôi sẽ tìm cách sử dụng BIT (n). Tuy nhiên nếu tôi có các cột cần truy vấn từ SQL, tôi sẽ sử dụng BOOLESE.
Một ví dụ sẽ là một ứng dụng sử dụng cờ để ghi lại những tuần sự kiện sẽ diễn ra, với một bit mỗi tuần, là 1 nếu sự kiện diễn ra vào tuần đã cho. Nếu dữ liệu sẽ được dễ dàng truy vấn trong cơ sở dữ liệu, thì đó sẽ là dữ liệu được bình thường hóa trong hai bảng, nhưng nếu dữ liệu chỉ cần được lưu trữ trong cơ sở dữ liệu, thì tốt nhất nên giữ ở dạng ứng dụng sử dụng nó trong.