Lợi ích của việc sử dụng BOOLESE so với TINYINT (1) là gì?


16

Từ hướng dẫn sử dụng MySQL, nó nói:

BOOL, BOOLESE

Các loại này là từ đồng nghĩa với TINYINT (1). Giá trị bằng 0 được coi là sai. Các giá trị khác không được coi là đúng:

Tôi đã tạo một cột BOOLESE với 0giá trị mặc định. Sau đó tôi cập nhật giá trị lên 2. Về mặt logic, tôi mong đợi MySQL chấp nhận một trong hai 0hoặc 1vì nó là một boolean. Tuy nhiên, MySQL không phát sinh lỗi hoặc ngăn tôi thực hiện cập nhật.

Nếu BOOLESE hoạt động chính xác giống như TINYINT (1), liệu nó có tạo ra sự khác biệt nào cho dù tôi sử dụng TINYINT (1) hay BOOLESE không?

Câu trả lời:


11

Hai cái này thực sự là từ đồng nghĩa, vì vậy bạn có thể sử dụng chúng thay thế cho nhau. Bạn sẽ không thấy bất kỳ sự khác biệt giữa chúng.

Nếu bạn chỉ muốn cho phép 0 và 1, bạn vẫn có thể sử dụng bitloại.


1
@QuestionOverflow Hãy nhớ rằng đó BITthực sự là một trường bit chứa từ một đến sáu mươi bốn bit.
David Harkness

2

Nếu bạn đang làm việc với người khác (hoặc bạn muốn tự nhắc nhở), bạn có thể sử dụng loại dữ liệu BOOLEANđể đề xuất rằng dữ liệu chỉ nhằm mục đích nhận giá trị 1 hoặc 0.


0

Dường như với tôi thực sự có một sự khác biệt.

Trong một bảng tôi đang sử dụng, tôi có một cột được định nghĩa là một tinyint với một chỉ mục trên cột. Khi tôi gọi truy vấn sau "giải thích select * từ bảng trong đó cột là đúng", nó chỉ ra rằng nó sẽ đọc tất cả các hàng trong bảng (cột "could_keys" và "ref" là null mặc dù cột "key" hiển thị mục lục).

Thay đổi truy vấn thành "giải thích select * từ bảng trong đó cột = 1" chỉ mục sẽ khởi động chính xác, với các cột "khóa có thể" và "ref" được gán giá trị và "hàng" được đặt thành số thấp hơn nhiều.

Tôi cũng đã thử thay "true" bằng "false" và 1 bằng 0 và nhận được kết quả tương đương.

Tiến lên một bước nữa tôi chuyển từ một tí hon sang một int và nó không có gì khác biệt.

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.