Dari manual MySQL, tertulis:
BOOL, BOOLEAN
Tipe-tipe ini adalah sinonim untuk TINYINT (1). Nilai nol dianggap salah. Nilai bukan nol dianggap benar:
Saya membuat kolom BOOLEAN dengan 0
sebagai nilai default. Lalu saya memperbarui nilainya ke 2
. Secara logis, saya mengharapkan MySQL untuk menerima salah satu 0
atau 1
karena itu adalah boolean. Namun, MySQL tidak mengeluarkan kesalahan atau mencegah saya melakukan pembaruan.
Jika BOOLEAN bekerja persis sama dengan TINYINT (1), apakah ada bedanya apakah saya menggunakan TINYINT (1) atau BOOLEAN?
BIT
ini benar-benar bidang bit yang menampung satu hingga enam puluh empat bit secara kompak.Jika Anda bekerja dengan orang lain (atau Anda ingin mengingatkan diri sendiri), Anda dapat menggunakan tipe data
BOOLEAN
untuk menyarankan bahwa data hanya dimaksudkan untuk mengambil nilai 1 atau 0.sumber
Menurut saya memang ada perbedaan.
Dalam tabel yang saya gunakan, saya memiliki kolom yang didefinisikan sebagai tinyint dengan indeks pada kolom. Ketika saya memunculkan kueri berikut "jelaskan pilih * dari tabel di mana kolom itu benar" itu menunjukkan bahwa ia akan membaca semua baris dalam tabel (kolom "mungkin_kunci" dan "ref" adalah nol meskipun kolom "kunci" menunjukkan indeks).
Mengubah kueri menjadi "jelaskan pilih * dari tabel di mana kolom = 1" indeks menendang dengan benar, dengan "kemungkinan kunci" dan "ref" kolom diberi nilai dan "baris" diatur ke angka yang jauh lebih rendah.
Saya juga mencoba mengganti "true" dengan "false" dan 1 dengan 0 dan mendapat hasil yang sebanding.
Melangkah lebih jauh, saya beralih dari intik ke int dan tidak ada bedanya.
sumber