MySQL'de varsayılan değer olarak false ile boole sütunu oluşturulsun mu?


127

booleanMySQL'de varsayılan değeri olan bir sütun içeren bir tablo oluşturmak istiyorum false. Ama varsayılan olarak NULL kabul ediyor ...

Yanıtlar:


203

Varsayılan olarak ( 0yanlış anlamına gelir) veya 1(doğru anlamına gelir ) belirtmeniz gerekir . İşte bir örnek:

create table mytable (
     mybool boolean not null default 0
);

Bilginize: booleaniçin bir takma addır tinyint(1).

İşte kanıtı:

mysql> create table mytable (
    ->          mybool boolean not null default 0
    ->     );
Query OK, 0 rows affected (0.35 sec)

mysql> insert into mytable () values ();
Query OK, 1 row affected (0.00 sec)

mysql> select * from mytable;
+--------+
| mybool |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

Bilginize: Testim aşağıdaki MySQL sürümünde yapıldı:

mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.0.18-max-log |
+----------------+
1 row in set (0.00 sec)

2
Yoksa öyle mi? Kabukta kodlama 0 başarılı veya 'doğru' anlamına gelebilir. Değerin ne anlama geldiğine karar verirken koda güvenmek zorunda kalmamamız için MySQL gerçekten 'true' ve 'false' döndürürse güzel olurdu.
tu-Reinstate Monica-dor duh

3
Bu arada, boolean, tinyint (1) için bir takma ad olduğundan, bu, boole'leri 0 ve 1 dışındaki sayılara ayarlayabileceğiniz ve şikayet etmeyeceğiniz anlamına gelir! Bu, alanı yanlışlıkla artırır veya azaltırsanız, verilerinizi bozabileceğiniz anlamına gelir! : -O Bunun yerine bir ENUM alanı kullanmanızı tavsiye ederim.
tu-Reinstate Monica-dor duh

3
"Başarılı" ve "doğru" tamamen ortogonal şeylerdir. Hata kodları boole değildir.
Matthew

14

MySQL'de ENUM'u doğru / yanlış için kullanın, herhangi bir ekstra kod olmadan doğru / yanlış değerleri verir ve kabul eder.

ALTER TABLE `itemcategory` ADD `aaa` ENUM('false', 'true') NOT NULL DEFAULT 'false'

11

Oluşturma sırasında aşağıdaki gibi varsayılan bir değer ayarlayabilirsiniz:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
Married boolean DEFAULT false);

1

Boole sütununu boş değil yaparsanız, varsayılan 'varsayılan' değer yanlıştır; açıkça belirtmeniz gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.