
点击上方



使用场景
NULL 应该用在字段值确实缺失或未知的情况下。例如,一个用户的中间名可能在系统中并未提供,这个时候使用NULL是恰当的。
空字符串 应该用在你知道字段值应该是字符串,但是它是“无内容”的情况。比如,用户填写了一个表单,但是某个可选的文本字段被留空了。
Oracle

Oracle
INSERT INTO table_name (column_name) VALUES ('');
在上述例子中, column_name
将会存储一个NULL值。

MySQL
INSERT INTO table_name (column_name) VALUES (NULL);INSERT INTO table_name (column_name) VALUES ('');
在上面的第一个语句中, column_name
将存储NULL,而在第二个语句中,它将存储一个长度为零的字符串。

PostgreSQL
INSERT INTO table_name (column_name) VALUES (NULL);INSERT INTO table_name (column_name) VALUES ('');这里的行为和MySQL一致,column_name
会分别存储NULL和空字符串。

SQL Server
INSERT INTO table_name (column_name) VALUES (NULL);INSERT INTO table_name (column_name) VALUES ('');
这里, column_name
同样会分别存储NULL和空字符串。
NULL的使用

比较的特殊性:在SQL中,任何与NULL的直接比较都会返回未知(即不是真也不是假)。这就是为什么检查一个字段是否为NULL时,你需要使用 IS NULL
或IS NOT NULL
。算术运算:任何包含NULL的算术运算都将返回NULL,例如, NULL + 10
结果是NULL,因为如果其中一个操作数是未知的,那么结果也是未知的。聚合函数:大多数聚合函数(如SUM, AVG等)会忽略NULL值。但是,COUNT(*)会包括NULL值,因为它计算的是行数,而不是特定列的值;相对地,COUNT(column_name)不会计算该列的NULL值。
空字符串使用

比较:空字符串可以与其他字符串进行比较, '' = ''
将返回真。串联:空字符串可以与其他字符串连接,例如 'hello' || ''
将简单地返回'hello'
。聚合函数:空字符串将被聚合函数视为有效值。
数据库设计的影响

模式设计:你需要决定哪些字段是必须的,哪些是可选的。必须的字段应该定义为NOT NULL,而可选的字段可以接受NULL值。 数据完整性:允许NULL值的字段会影响数据完整性约束,如外键约束。如果一个字段可以是NULL,那么即使它是外键也可以不参考任何实际的外键值。 业务逻辑:应用程序的业务逻辑需要妥善处理NULL和空字符串。例如,在显示数据时,你可能需要决定是否将NULL值显示为“N/A”、“未知”或保留为空白。
数据库特定考虑

Oracle:由于Oracle将空字符串视为NULL,这可能会导致在字符串操作中出现一些非直觉的行为。例如,如果你期望一个空字符串可以用作默认值,那么在Oracle中这会导致NULL值,可能不是所期望的。 MySQL、PostgreSQL、SQL Server:这些数据库区分NULL和空字符串,因此在它们中可以更明确地表示没有数据(NULL)和空字符串数据('')。在使用这些数据库时,开发者需要确保他们的应用程序能够正确处理两种情况。
SQL示例
-- Checking for NULLSELECT * FROM table_name WHERE column_name IS NULL;-- Checking for empty stringSELECT * FROM table_name WHERE column_name = '';-- Checking for both NULL and empty string in MySQL, PostgreSQL, SQL ServerSELECT * FROM table_name WHERE (column_name IS NULL OR column_name = '');
结论

文章转载自DBA巫师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




