สร้างคอลัมน์บูลีนใน MySQL ด้วย false เป็นค่าเริ่มต้น?


127

ผมต้องการสร้างตารางใน MySQL ด้วยคอลัมน์ที่มีค่าเริ่มต้นคือboolean falseแต่มันยอมรับ NULL เป็นค่าเริ่มต้น ...

คำตอบ:


203

คุณต้องระบุ0(หมายถึงเท็จ) หรือ1(หมายถึงจริง) เป็นค่าเริ่มต้น นี่คือตัวอย่าง:

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

FYI: booleanเป็นนามแฝงสำหรับtinyint(1).

นี่คือหลักฐาน:

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: การทดสอบของฉันทำกับ MySQL เวอร์ชันต่อไปนี้:

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

2
หรือไม่? ในเชลล์สคริปต์ 0 อาจหมายถึงสำเร็จหรือ 'จริง' คงจะดีไม่น้อยถ้า MySQL ส่งคืน 'จริง' และ 'เท็จ' เพื่อที่เราจะได้ไม่ต้องพึ่งพาโค้ดในการตัดสินว่าค่านั้นหมายถึงอะไร
tu-Reinstate Monica-dor duh

3
อนึ่งเนื่องจากบูลีนเป็นนามแฝงสำหรับ tinyint (1) นั่นหมายความว่าคุณสามารถตั้งค่าบูลีนเป็นตัวเลขอื่นที่ไม่ใช่ 0 และ 1 และจะไม่บ่น! ซึ่งหมายความว่าหากคุณเพิ่มหรือลดฟิลด์โดยไม่ได้ตั้งใจคุณจะทำให้ข้อมูลของคุณยุ่งเหยิงได้! : -O ขอแนะนำให้ใช้ฟิลด์ ENUM แทน
tu-Reinstate Monica-dor duh

3
"สำเร็จ" และ "จริง" เป็นสิ่งที่ตั้งฉากกันโดยสิ้นเชิง รหัสข้อผิดพลาดไม่ใช่บูลีน
Matthew อ่าน

14

ใช้ ENUM ใน MySQL สำหรับ true / false ซึ่งให้และยอมรับค่าจริง / เท็จโดยไม่มีรหัสเพิ่มเติมใด ๆ

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

11

คุณสามารถตั้งค่าเริ่มต้นในเวลาสร้างเช่น:

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

1

หากคุณกำลังทำให้คอลัมน์บูลีนไม่เป็นโมฆะค่าเริ่มต้น 'ค่าเริ่มต้น' จะเป็นเท็จ คุณไม่จำเป็นต้องระบุอย่างชัดเจน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.