Loại cột nào là tốt nhất để sử dụng trong cơ sở dữ liệu MySQL cho các giá trị boolean? Tôi sử dụng boolean
nhưng đồng nghiệp của tôi sử dụng tinyint(1)
.Boolean vs tinyint (1) cho các giá trị boolean trong MySQL
Trả lời
Các loại dữ liệu này là từ đồng nghĩa.
Yep - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html –
Tôi sẽ không nói dữ liệu _types_ là từ đồng nghĩa - tinyint (1) giống như bool , nhưng tinyint và bool thì không giống nhau.Điểm nhỏ, nhưng câu trả lời của bạn đã cho tôi biết lần đầu tiên tôi đọc nó –
Điều này không trả lời được câu hỏi. Trong khi đúng là tinyint (1) có chức năng giống hệt với bool, OP hỏi điều gì là tốt nhất để sử dụng. Câu trả lời của @dj_segfault thực hiện một công việc thích hợp giải thích tại sao bool nên được ưu tiên hơn tinyint (1) khi lưu trữ một giá trị boolean. –
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
. See this page in the MySQL manual.
Cá nhân tôi sẽ đề nghị sử dụng tinyint làm sở thích, vì boolean không làm những gì bạn nghĩ nó làm từ tên, do đó, nó làm cho mã có khả năng gây hiểu nhầm. Nhưng ở một mức độ thực tế, nó thực sự không quan trọng - cả hai đều làm điều tương tự, vì vậy bạn không đạt được hoặc mất bất cứ điều gì bằng cách sử dụng một trong hai.
sử dụng enum nó dễ dàng và nhanh nhất
tôi sẽ không khuyên bạn nên enum hoặc tinyint (1) như bit (1) chỉ cần 1 bit để lưu trữ giá trị boolean trong khi tinyint (1) cần 8 bit.
ref
Chúng tôi không thể sử dụng enum vì cơ sở dữ liệu của chúng tôi cũng cần hỗ trợ sqlite – tom
Nếu bạn đang sử dụng InnoDB, bit kết thúc bằng cách sử dụng nhiều không gian như tinyint. Từ [Hiệu suất cao MySQL] (http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/) (các chàng trai percona) "InnoDB lưu trữ [s] mỗi cột [bit] là loại số nguyên nhỏ nhất đủ lớn để chứa các bit, vì vậy bạn không lưu bất kỳ dung lượng lưu trữ nào. " Lợi ích duy nhất là nếu bạn đang lưu trữ nhiều giá trị boolean trong cột BIT (morethan1). Vì vậy, nếu bạn chỉ có một trường boolean, sử dụng tinyint giống như bit trong InnoDB, và thích hợp hơn vì tinyint thường dễ làm việc hơn. – billmalarky
tôi sẽ tham gia một cách tiếp cận khác nhau ở đây và cho rằng nó chỉ là quan trọng đối với các nhà phát triển đồng bào của bạn để hiểu mã của bạn vì nó là dành cho 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ế về ngữ nghĩa truyền đạt ý định của bạn là gì, và điều đó đáng giá.
Nếu bạn sử dụng một tinyint, nó không rõ ràng rằng các giá trị duy nhất bạn sẽ thấy là 0 và 1. Một boolean là luôn luôn đúng hoặc sai.
Kinh nghiệm của tôi khi sử dụng Dapper để kết nối với MySQL là nó không thành vấn đề. Tôi đã thay đổi một bit không rỗng (1) thành tinyint (1) bằng cách sử dụng tập lệnh sau:
Sau đó, Dapper bắt đầu ném ngoại lệ. Tôi đã cố gắng nhìn vào sự khác biệt trước và sau kịch bản. Và nhận thấy 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;
nào giải quyết được vấn đề.
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 gốc của ngôn ngữ lập trình của bạn.
- 1. Làm cách nào để lấy giá trị int thay vì giá trị boolean từ cột TINYINT (1)?
- 2. mysql tinyint (1) vs tinyint (2) vs tinyint (3) vs tinyint (4)
- 3. Hibernate JPA, MySQL và tinyint (1) cho Boolean thay vì bit hoặc char
- 4. Sự nhầm lẫn BOOLEAN hoặc TINYINT
- 5. Để đối phó với các giá trị 'Boolean' trong PHP & MySQL
- 6. Khuôn khổ thực thể: ánh xạ tinyint thành boolean
- 7. Đọc các giá trị boolean từ DB?
- 8. Query để chuyển giá trị boolean trong MySQL
- 9. Giá trị JSON 1 hoặc 0 - int hoặc boolean
- 10. Lưu trữ giá trị Boolean trong SQL?
- 11. Mục tiêu c các giá trị boolean
- 12. Cách tạo giá trị boolean?
- 13. mẫu bit (giá trị biến) cho boolean trong java?
- 14. Char hoặc Int cho giá trị boolean trong C?
- 15. kiểm tra giá trị boolean từ điển.
- 16. Giá trị Boolean của các đối tượng trong Python
- 17. lớp Gán giá trị boolean bằng Python
- 18. Chuyển đổi giá trị Boolean/đảo ngược
- 19. Đánh giá && boolean hành
- 20. thay đổi mặc định Giá trị Boolean
- 21. Cách lấy giá trị Boolean từ Object
- 22. lập bản đồ không đúng mysql tinyint (2) như boolean với học thuyết
- 23. C++ Đánh giá Boolean
- 24. Là hoặc Có để tiền tố các giá trị boolean
- 25. Phân tích chuỗi thành giá trị boolean trong PHP
- 26. Thay đổi giá trị boolean trong hàm lớp trong java
- 27. Gửi giá trị boolean trong dữ liệu jQuery ajax
- 28. Rails cơ sở dữ liệu giá trị boolean
- 29. Làm thế nào để in giá trị boolean trong Go?
- 30. Giá trị boolean mặc định trong C# là gì?
Dường như MySQL xử lý một cách minh bạch 'boolean' là' tinyint (1) '. Vì vậy, bạn có thể sử dụng 'boolean',' true' và 'false' và MySQL xử lý chúng là' tinyint (1) ',' 1' và '0'. – ADTC
Trường hợp khác là char 1 với Y & N được cho là nhanh hơn bởi một số người. – Zon