Dalam kasus apa Anda akan menggunakan yang mana? Apakah ada banyak perbedaan? Yang biasanya saya gunakan oleh mesin persistensi untuk menyimpan boolean?
106
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)]
TINYINT [(M)] [TIDAK DITANDATANGANI] [ZEROFILL]
Pertimbangkan juga ini;
BOOL, BOOLEAN
sumber
boolean
akan memakan waktu satu byte meskipun sebenarnya hanya sedikit, jadi BIT (1) lebih baik setelah v5.0.3?BOOL
/BOOLEAN
adalah aliasTINYINT(1)
bukanBIT
. Tentu, mereka semua akhirnya menempati seluruh byte, tetapi secara semantikBIT
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).
sumber
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.
sumber
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
sumber
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
sumber