คอลัมน์ INT ใน MySQL รองรับค่า NULL
ใช่ คอลัมน์ชนิด INT (และ numeric types อื่นๆ) สามารถเก็บค่า NULL ได้ หากไม่ได้ระบุ NOT NULL constraint
ตัวอย่างการใช้งาน
สร้างตาราง INT column ไม่มี NOT NULL:
CREATE TABLE nullableIntDemo (
Id INT NOT NULL AUTO_INCREMENT,
Price INT, -- ไม่มี NOT NULL = nullable
PRIMARY KEY(Id)
);
INSERT ค่า NULL และตัวเลข:
INSERT INTO nullableIntDemo(Price) VALUES(NULL);
INSERT INTO nullableIntDemo(Price) VALUES(100);
INSERT INTO nullableIntDemo(Price) VALUES(200);
INSERT INTO nullableIntDemo(Price) VALUES(NULL);
INSERT INTO nullableIntDemo(Price) VALUES(NULL);
ผลลัพธ์:
+----+-------+
| Id | Price |
+----+-------+
| 1 | NULL |
| 2 | 100 |
| 3 | 200 |
| 4 | NULL |
| 5 | NULL |
+----+-------+
คำอธิบาย
INT= SIGNED INTEGER (มีเครื่องหมาย) ค่า -2,147,483,648 ถึง 2,147,483,647INT NULL(default) = รองรับ NULL ได้INT NOT NULL= ห้าม NULLINT DEFAULT 0= ค่าเริ่มต้น 0 (แต่ยัง INSERT NULL ได้ถ้าไม่มี NOT NULL)
NULL vs 0 vs Empty String
| ค่า | ความหมาย | เก็บใน INT ได้ไหม |
|---|---|---|
| NULL | ไม่มีค่า / ไม่ทราบค่า | ได้ (ถ้าไม่มี NOT NULL) |
| 0 | ศูนย์ (ค่าตัวเลขจริง) | ได้ |
| '' (empty string) | สตริงว่าง | ได้ (จะแปลงเป็น 0 พร้อม warning) |
Best Practice
- ใช้
NOT NULL DEFAULT 0หากคอลัมน์ต้องมีค่าตัวเลขเสมอ - ใช้
NULLหาก "ไม่มีข้อมูล" มีความหมายต่างจาก "ศูนย์" (เช่น ราคายังไม่กำหนด vs ราคาฟรี) - หลีกเลี่ยงการเก็บ empty string ในคอลัมน์ตัวเลข