SQL中Insert语句的'NULL'与原生NULL功能是否一致?新手恢复误删表该如何选择?
关于Insert语句中NULL与'NULL'的区别说明
嘿,刚接触SQL就遇到数据恢复的问题,确实容易在NULL这个点上踩坑,我来给你讲清楚这两者的区别,帮你顺利恢复数据~
你应该用哪一个?
毫无疑问,你需要使用不带单引号的NULL,而不是带单引号的'NULL'。
使用'NULL'会产生什么后果?
这得看你要插入的字段类型:
- 如果字段是字符串类型(比如
VARCHAR、TEXT):数据库会把'NULL'当作普通的字符串内容存储进去,也就是说这个字段里会实实在在地出现"NULL"这四个字母,而不是你想要的“空值”。 - 如果字段是数值类型(比如
INT、DECIMAL)、日期类型(比如DATETIME)或者其他非字符串类型:这条INSERT语句会直接执行失败,抛出类型不匹配的错误——数据库无法把字符串"NULL"转换成对应的数值/日期类型,导致你没法完成数据恢复。
Insert语句中的'NULL'和SQL的NULL功能相同吗?
完全不同!
- SQL中的
NULL是系统定义的特殊值,专门用来表示“缺失的数据”“未知的值”,它不属于任何数据类型,是一个单独的概念。 - 而
'NULL'只是一个普通的字符串字面量,和你插入'hello'、'123'没有本质区别,只是它的内容刚好是"NULL"这四个字符而已,完全不具备SQL中NULL的“空值”含义。
举个简单的例子帮你理解:
假设你的表有两个字段:create_time(DATETIME类型)和remark(VARCHAR(50)类型)
-- 正确的写法:remark字段被设置为NULL(空值) INSERT INTO your_table (create_time, remark) VALUES ('2021-05-25 11:58:41.000', NULL); -- 错误的写法(如果要表示空值的话):remark字段会存入字符串"NULL" INSERT INTO your_table (create_time, remark) VALUES ('2021-05-25 11:58:41.000', 'NULL');
内容的提问来源于stack exchange,提问作者Paul Ang
相关产品推荐
相关产品推荐

