Jawaban:
Tipe data ini adalah sinonim.
Saya akan mengambil pendekatan berbeda di sini dan menyarankan bahwa sama pentingnya bagi sesama pengembang Anda untuk memahami kode Anda seperti halnya untuk kompiler / database. Menggunakan boolean dapat melakukan hal yang sama seperti menggunakan tinyint, namun memiliki keuntungan untuk menyampaikan maksud Anda secara semantik, dan itu bernilai.
Jika Anda menggunakan tinyint, tidak jelas bahwa satu-satunya nilai yang harus Anda lihat adalah 0 dan 1. Boolean SELALU benar atau salah.
boolean
bukanlah tipe data yang berbeda di MySQL; itu hanya sinonim untuk tinyint
. Lihat halaman ini di manual MySQL .
Secara pribadi saya akan menyarankan menggunakan tinyint sebagai preferensi, karena boolean tidak melakukan apa yang Anda pikirkan dari namanya, jadi itu membuat kode yang berpotensi menyesatkan. Tetapi pada tingkat praktis, itu tidak masalah - mereka berdua melakukan hal yang sama, jadi Anda tidak mendapatkan atau kehilangan apa pun dengan menggunakan keduanya.
gunakan enum yang paling mudah dan tercepat
saya tidak akan merekomendasikan enum atau tinyint (1) karena bit (1) hanya membutuhkan 1 bit untuk menyimpan nilai boolean sementara tinyint (1) membutuhkan 8 bit.
ref
BIT(M) - approximately (M+7)/8 bytes
lihat: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Meskipun benar bahwa bool
dan tinyint(1)
secara fungsional identik, bool
harus menjadi pilihan yang disukai karena membawa makna semantik dari apa yang Anda coba lakukan. Selain itu, banyak ORM akan diubah bool
menjadi jenis boolean asli bahasa pemrograman Anda.
Pengalaman saya saat menggunakan Dapper untuk terhubung ke MySQL adalah hal itu penting . Saya mengubah bit non nullable (1) menjadi tinyint nullable (1) dengan menggunakan skrip berikut:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Kemudian Dapper mulai melempar Pengecualian. Saya mencoba melihat perbedaan sebelum dan sesudah skrip. Dan perhatikan bit (1) telah berubah menjadi tinyint (1).
Saya kemudian berlari:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Yang memecahkan masalah.
boolean
sebagaitinyint(1)
. Sehingga Anda dapat menggunakanboolean
,true
danfalse
dan memperlakukan MySQL mereka sebagaitinyint(1)
,1
dan0
.