Buat kolom boolean di MySQL dengan nilai default false?


127

Saya ingin membuat tabel di MySQL dengan booleankolom yang nilai default-nya adalah false. Tapi itu menerima NULL sebagai default ...

Jawaban:


202

Anda harus menentukan 0(artinya salah) atau 1(artinya benar) sebagai default. Berikut ini contohnya:

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

FYI: booleanadalah alias untuk tinyint(1).

Ini buktinya:

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)

FYI: Pengujian saya dilakukan pada versi MySQL berikut:

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

2
Atau apakah itu? Dalam skrip shell 0 bisa berarti berhasil atau 'benar'. Alangkah baiknya jika MySQL benar-benar mengembalikan 'true' dan 'false' sehingga kita tidak perlu bergantung pada kode untuk menentukan apa arti nilainya.
tu-Reinstate Monica-dor duh

3
Kebetulan, karena boolean adalah alias untuk tinyint (1), itu berarti Anda dapat menyetel boolean ke angka selain 0 dan 1 dan itu tidak akan mengeluh! Yang berarti jika Anda secara tidak sengaja menambah atau mengurangi bidang maka Anda dapat mengacaukan data Anda! : -O Saya akan merekomendasikan menggunakan kolom ENUM sebagai gantinya.
tu-Reinstate Monica-dor duh

3
"Sukses" dan "benar" adalah hal yang sepenuhnya ortogonal. Kode kesalahan bukanlah boolean.
Matius Baca

14

Gunakan ENUM di MySQL untuk benar / salah yang diberikan dan menerima nilai benar / salah tanpa kode tambahan.

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

11

Anda dapat mengatur nilai default pada saat pembuatan seperti:

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

1

Jika Anda membuat kolom boolean bukan null maka nilai default 'default' adalah false; Anda tidak harus menentukannya secara eksplisit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.