MySQL裡null與空值的辨析

findumars發表於2013-09-19

CREATE TABLE `test` (
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;

錯誤(不可以插入null值):
INSERT INTO `test` VALUES (null,1);
正確(插入''沒問題):
INSERT INTO `test` VALUES ('',1);
INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');

檢索(''不是null,所以not null會把''都算進去):
SELECT * FROM `test` WHERE col1 IS NOT NULL
結果:所有三條資料

檢索(正常檢索):
SELECT * FROM `test` WHERE col1 <> ''
結果:最後一條資料

檢索(<>'',會同時排除''和null的資料,只檢索有內容的資料):
SELECT * FROM `test` WHERE col2<>''

總結:
1. null的儲存不是'',是其它特殊的字元表示。
2. null在檢索<>''的時候,也會被排除,因為沒有真正有意義的內容
3. not null嚴格按照字面意思,''不會被排除。
4. 定義not null的欄位,可以插入''

 

http://my.oschina.net/junn/blog/161769

相關文章