Yanıtlar:
Bu veri türleri eşanlamlıdır.
Burada farklı bir yaklaşım benimseyeceğim ve geliştirici arkadaşlarınızın kodunuzu anlamalarının derleyici / veritabanı için olduğu kadar önemli olduğunu önereceğim. Boole kullanmak, tinyint kullanmakla aynı şeyi yapabilir, ancak niyetinizin ne olduğunu anlamsal olarak iletme avantajına sahiptir ve bu bir şeye değer.
Küçük bir değer kullanırsanız, görmeniz gereken değerlerin 0 ve 1 olduğu açık değildir. Boole HER ZAMAN doğru veya yanlıştır.
booleanMySQL'de farklı bir veri türü değildir; sadece eşanlamlısı tinyint. MySQL kılavuzundaki bu sayfaya bakın .
Şahsen ben minicint'i bir tercih olarak kullanmanızı öneririm, çünkü boolean adından yaptığını düşündüğünüz şeyi yapmaz, bu yüzden potansiyel olarak yanıltıcı kod yapar. Ancak pratik düzeyde, gerçekten önemli değil - ikisi de aynı şeyi yapıyor, yani ikisini de kullanarak hiçbir şey kazanmıyor veya kaybetmiyorsunuz.
enum kullanın , en kolay ve en hızlısı
minikint (1) 8 bite ihtiyaç duyarken, bit (1) boole değerini depolamak için yalnızca 1 bit gerektiğinden, enum veya tinyint (1) 'i önermeyeceğim.
ref
BIT(M) - approximately (M+7)/8 bytesbkz: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Bunun doğru olsa boolve tinyint(1)vardır işlevsel özdeş, boolbunu yapmaya çalışıyoruz ne semantik anlam taşır, çünkü tercih edilmelidir. Ayrıca, birçok ORM, boolprogramlama dilinizin yerel boole türüne dönüşecektir.
Kullanarak Benim deneyim Dapper bağlanmak için MySQL olmasıdır fark eder . Aşağıdaki betiği kullanarak null yapılamayan bir biti (1) null yapılabilir bir tinyint (1) olarak değiştirdim:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Sonra Dapper, İstisnalar atmaya başladı. Senaryodan önceki ve sonraki farka bakmaya çalıştım. Ve bitin (1) tinyint (1) olarak değiştiğini fark ettim.
Sonra koştum:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Sorun çözüldü.
booleanşekildetinyint(1). Kullanabileceğiniz Yaniboolean,truevefalseolarak ve MySQL davranır onlarıtinyint(1),1ve0.