Các cột bit so với Boolean


12

Cho rằng các trường bit chỉ là biểu diễn nhị phân của dữ liệu và cần được truy vấn theo cách hơi "lạ".

Nó thực sự cung cấp bất kỳ lợi ích bằng cách sử dụng một trường bit cho giá trị boolean? Từ những gì tôi có thể thấy dường như gợi ý rằng không gian là lợi ích thực sự duy nhất.

Câu trả lời:


14

Cá nhân, tôi sẽ sử dụng BOOLEANcho một giá trị boolean. Nhưng hãy nhớ rằng hãy cẩn thận rằng trong MySQL, BOOLEANchỉ 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 TRUEFALSEkhi 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).


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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.