MySQL中的NULL和空字符串''這兩個概念經(jīng)常被混淆,但它們是有區(qū)別的。
NULL是一個特殊值,表示該字段的值為空。在MySQL中,如果一個字段允許為空,則插入空值時會默認(rèn)存儲為NULL。 例如: CREATE TABLE user ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) DEFAULT NULL, age INT(11) ); INSERT INTO user (name, age) VALUES (NULL, 18); INSERT INTO user (name, age) VALUES ('Tom', NULL); 在第一個INSERT語句中,將NULL存儲在name字段中。 而在第二個INSERT語句中,將NULL存儲在age字段中。
空字符串''則是一個字符串類型的值,表示該字段的值為空字符串。如果一個字段是字符類型,那么插入空字符串時默認(rèn)會存儲為空字符串'',而不是NULL。
例如: CREATE TABLE user ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) DEFAULT '', age INT(11) ); INSERT INTO user (name, age) VALUES ('', 18); INSERT INTO user (name, age) VALUES ('Tom', ''); 在第一個INSERT語句中,將空字符串''存儲在name字段中。 而在第二個INSERT語句中,將空字符串''存儲在age字段中。
因此,當(dāng)需要區(qū)分一個字段的值是空還是NULL時,需要使用IS NULL或IS NOT NULL來判斷,而不能直接使用=或!=的方式。
例如:SELECT * FROM user WHERE name IS NULL;