Bạn sẽ sử dụng cái nào trong những trường hợp nào? Có nhiều sự khác biệt? Tôi thường sử dụng công cụ nào để lưu trữ boolean?
Bạn sẽ sử dụng cái nào trong những trường hợp nào? Có nhiều sự khác biệt? Tôi thường sử dụng công cụ nào để lưu trữ boolean?
Câu trả lời:
TINYINT là một giá trị số nguyên 8 bit, trường BIT có thể lưu trữ giữa 1 bit, BIT (1) và 64 bit, BIT (64). Đối với các giá trị boolean, BIT (1) khá phổ biến.
BIT [(M)]
Một loại trường bit. M cho biết số bit trên mỗi giá trị, từ 1 đến 64. Giá trị mặc định là 1 nếu M bị bỏ qua.
Kiểu dữ liệu này đã được thêm vào MySQL 5.0.3 cho MyISAM và mở rộng trong 5.0.5 cho MEMORY, InnoDB, BDB và NDBCLUSTER. Trước 5.0.3, BIT là một từ đồng nghĩa với TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Một số nguyên rất nhỏ. Dải ô có dấu là -128 đến 127. Dải ô không dấu là 0 đến 255.
Ngoài ra, hãy xem xét điều này;
BOOL, BOOLEAN
Những loại này là từ đồng nghĩa của TINYINT (1). Giá trị bằng 0 được coi là sai. Các giá trị khác 0 được coi là đúng.
boolean
sẽ mất một byte mặc dù nó thực sự chỉ là một bit, vậy BIT (1) tốt hơn sau v5.0.3?
BOOL
/ BOOLEAN
là bí danh TINYINT(1)
thay vì BIT
. Chắc chắn, tất cả chúng đều chiếm trọn một byte, nhưng về mặt ngữ nghĩa BIT
sẽ thích hợp hơn nhiều.
Tất cả các cuộc thảo luận lý thuyết này đều tuyệt vời, nhưng trên thực tế, ít nhất nếu bạn đang sử dụng MySQL và thực sự cho SQLServer, thì tốt nhất bạn nên gắn bó với dữ liệu phi nhị phân cho boolean của mình vì lý do đơn giản là nó dễ làm việc hơn khi bạn đang xuất dữ liệu, truy vấn, v.v. Điều đặc biệt quan trọng nếu bạn đang cố gắng đạt được khả năng tương tác giữa MySQL và SQLServer (tức là bạn đồng bộ hóa dữ liệu giữa hai loại này), bởi vì việc xử lý kiểu dữ liệu BIT khác nhau ở hai loại này. VẬY trong thực tế, bạn sẽ ít phức tạp hơn nhiều nếu bạn gắn bó với kiểu dữ liệu số. Tôi muốn khuyên MySQL gắn bó với BOOL hoặc BOOLEAN được lưu trữ dưới dạng TINYINT (1). Ngay cả cách MySQL Workbench và MySQL Administrator hiển thị kiểu dữ liệu BIT cũng không đẹp (đó là một biểu tượng nhỏ cho dữ liệu nhị phân).
BIT chỉ nên cho phép 0 và 1 (và NULL, nếu trường không được xác định là NOT NULL). TINYINT (1) cho phép bất kỳ giá trị nào có thể được lưu trữ trong một byte duy nhất, -128..127 hoặc 0..255 tùy thuộc vào việc nó có chưa dấu hay không (giá trị 1 cho thấy rằng bạn định chỉ sử dụng một chữ số duy nhất, nhưng nó có không ngăn bạn lưu trữ một giá trị lớn hơn).
Đối với các phiên bản cũ hơn 5.0.3, BIT được hiểu là TINYINT (1), vì vậy không có sự khác biệt ở đó.
BIT có ngữ nghĩa "đây là một boolean" và một số ứng dụng sẽ coi TINYINT (1) theo cùng một cách (do cách MySQL sử dụng để xử lý nó), vì vậy các ứng dụng có thể định dạng cột dưới dạng hộp kiểm nếu chúng chọn loại và quyết định một định dạng dựa trên đó.
Có thể sai nhưng:
Tinyint là một số nguyên từ 0 đến 255
bit là 1 hoặc 0
Do đó đối với tôi bit là sự lựa chọn cho boolean
Từ kinh nghiệm của tôi, tôi nói với bạn rằng BIT có vấn đề trên các loại hệ điều hành linux (Ubuntu for ex). Tôi đã phát triển db của mình trên windows và sau khi triển khai mọi thứ trên linux, tôi gặp sự cố với các truy vấn chèn hoặc chọn từ các bảng có LOẠI DỮ LIỆU BIT.
Bit không an toàn cho bây giờ. Tôi đã đổi thành tinyint (1) và hoạt động hoàn hảo. Ý tôi là bạn chỉ cần một giá trị để phân biệt nếu nó là 1 hoặc 0 và tinyint (1) là ok cho điều đó