Tạo cột boolean trong MySQL với giá trị sai là giá trị mặc định?


127

Tôi muốn tạo một bảng trong MySQL với một booleancột có giá trị mặc định là false. Nhưng nó chấp nhận NULL như mặc định ...

Câu trả lời:


202

Bạn phải chỉ định 0(có nghĩa là sai) hoặc 1(có nghĩa là đúng) làm mặc định. Đây là một ví dụ:

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

FYI: booleanlà một bí danh cho tinyint(1).

Đây là bằng chứng:

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: Thử nghiệm của tôi đã được thực hiện trên phiên bản MySQL sau:

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

2
Hay không? Trong shell scripting 0 có thể có nghĩa là thành công hoặc 'đúng'. Sẽ thật tuyệt nếu MySQL thực sự trả về 'true' và 'false' để chúng ta không phải dựa vào mã quyết định giá trị nghĩa là gì.
tu-Tái lập Monica-dor duh

3
Ngẫu nhiên, vì boolean là bí danh của tinyint (1), điều đó có nghĩa là bạn có thể đặt booleans thành các số khác 0 và 1 và nó sẽ không phàn nàn! Điều đó có nghĩa là nếu bạn vô tình tăng hoặc giảm trường thì bạn có thể làm rối dữ liệu của mình! : -O Tôi khuyên bạn nên sử dụng trường ENUM thay thế.
tu-Tái lập Monica-dor duh

3
"Thành công" và "đúng" là những thứ hoàn toàn trực giao. Mã lỗi không phải là booleans.
Matthew đọc

14

Sử dụng ENUM trong MySQL cho đúng / sai, nó cung cấp và chấp nhận các giá trị đúng / sai mà không cần thêm bất kỳ mã nào.

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

11

Bạn có thể đặt giá trị mặc định tại thời điểm tạo như:

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

1

Nếu bạn đang tạo cột boolean là null thì giá trị 'mặc định' mặc định là sai; bạn không cần phải xác định rõ ràng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.