Jawaban:
TINYINT adalah nilai integer 8-bit, bidang BIT dapat menyimpan antara 1 bit, BIT (1), dan 64 bit, BIT (64). Untuk nilai boolean, BIT (1) cukup umum.
Dari Gambaran Umum Jenis Numerik ;
BIT [(M)]
Jenis bit-field. M menunjukkan jumlah bit per nilai, dari 1 hingga 64. Standarnya adalah 1 jika M dihilangkan.
Jenis data ini ditambahkan di MySQL 5.0.3 untuk MyISAM, dan diperpanjang di 5.0.5 menjadi MEMORY, InnoDB, BDB, dan NDBCLUSTER. Sebelum 5.0.3, BIT adalah sinonim untuk TINYINT (1).
TINYINT [(M)] [TIDAK DITANDATANGANI] [ZEROFILL]
Bilangan bulat yang sangat kecil. Rentang bertanda tangan adalah -128 hingga 127. Rentang unsigned adalah 0 hingga 255.
Pertimbangkan juga ini;
BOOL, BOOLEAN
Jenis ini adalah sinonim untuk TINYINT (1). Nilai nol dianggap salah. Nilai bukan nol dianggap benar.
boolean
akan memakan waktu satu byte meskipun sebenarnya hanya sedikit, jadi BIT (1) lebih baik setelah v5.0.3?
BOOL
/ BOOLEAN
adalah alias TINYINT(1)
bukan BIT
. Tentu, mereka semua akhirnya menempati seluruh byte, tetapi secara semantik BIT
akan jauh lebih tepat.
Semua diskusi teoretis ini bagus, tetapi pada kenyataannya, setidaknya jika Anda menggunakan MySQL dan benar-benar untuk SQLServer juga, yang terbaik adalah tetap menggunakan data non-biner untuk boolean Anda karena alasan sederhana sehingga lebih mudah untuk digunakan saat Anda mengeluarkan data, melakukan kueri, dan sebagainya. Ini sangat penting jika Anda mencoba untuk mencapai interoperabilitas antara MySQL dan SQLServer (yaitu Anda menyinkronkan data di antara keduanya), karena penanganan tipe data BIT berbeda di keduanya. SO dalam praktiknya Anda akan memiliki lebih sedikit kerepotan jika Anda tetap menggunakan tipe data numerik. Saya akan merekomendasikan MySQL untuk tetap menggunakan BOOL atau BOOLEAN yang disimpan sebagai TINYINT (1). Bahkan cara MySQL Workbench dan MySQL Administrator menampilkan tipe data BIT tidak bagus (ini adalah simbol kecil untuk data biner).
BIT seharusnya hanya mengizinkan 0 dan 1 (dan NULL, jika field tidak didefinisikan sebagai NOT NULL). TINYINT (1) memungkinkan nilai apa pun yang dapat disimpan dalam satu byte, -128..127 atau 0..255 tergantung apakah unsigned atau tidak (1 menunjukkan bahwa Anda bermaksud untuk hanya menggunakan satu digit, tetapi tidak tidak mencegah Anda menyimpan nilai yang lebih besar).
Untuk versi yang lebih lama dari 5.0.3, BIT diartikan sebagai TINYINT (1), jadi tidak ada perbedaan di sana.
BIT memiliki semantik "ini adalah boolean", dan beberapa aplikasi akan mempertimbangkan TINYINT (1) dengan cara yang sama (karena cara MySQL dulu memperlakukannya), jadi aplikasi dapat memformat kolom sebagai kotak centang jika mereka mencentang jenisnya dan memutuskan format berdasarkan itu.
Mungkin salah tapi:
Tinyint adalah bilangan bulat antara 0 dan 255
bit adalah 1 atau 0
Oleh karena itu bagi saya bit adalah pilihan untuk boolean
Dari pengalaman saya, saya memberi tahu Anda bahwa BIT memiliki masalah pada jenis OS linux (Ubuntu untuk ex). Saya mengembangkan db saya di windows dan setelah saya menerapkan semuanya di linux, saya mengalami masalah dengan kueri yang dimasukkan atau dipilih dari tabel yang memiliki JENIS DATA BIT.
Bit tidak aman untuk saat ini. Saya berubah menjadi tinyint (1) dan bekerja dengan sempurna. Maksud saya, Anda hanya perlu nilai untuk membedakan jika 1 atau 0 dan tinyint (1) tidak apa-apa untuk itu