哪一个代表空值?undef还是空字符串?

11

我想在表的列中插入null

undef和空字符串''哪个代表null?

应该使用哪一个,为什么?我知道可以使用defined函数来检查它。

但是我更关心数据库的角度,哪一个更适合表示null

更新:我正在使用DBI模块。

3个回答

15

9
假设使用 Perl DBI,undef 表示 SQL 中的 NULL
在 Perl 中的空字符串与 SQL 中的空字符串完全相同。

如果它们都代表“NULL”,那么应该使用哪一个? - user966588
2
@Drt,它们不代表 NULLundef 代表 NULL - Axeman
@Axeman 和 @Alnitak.. 当我执行 select * from tablename where columnname is null 时,每次都会得到相同的行。 :( - user966588
@ Alnitak..在两种情况下,1. 如果使用 '' 更新列 2. 如果使用 undef 更新列。相同的行用于 where columnname is null - user966588
1
@Drt,你的数据库可能没有区分NULL和空字符串。DBI无法解决这个问题。你使用的是哪种数据库? - cjm
7
@Drt,你的问题在这里。Oracle将空字符串视为“NULL”。 - cjm

4
假设您正在使用DBI模块并且使用绑定参数(因为如果您手动构造SQL,则会在字符串中使用NULL):

未定义的值或undef用于表示NULL值。

请参见DBI的perldoc文档
如果您没有直接使用DBI(例如,您使用DBIx::Class或其他ORM),那么您可能会发现它继承了此功能的DBI行为。

那么,如果我在该列上运行select语句,对于undef它会返回什么? - user966588
由于它不会包含 undef,所以那个问题没有意义。如果它是 NULL,则会得到 undef。请参阅我在答案中指向您的文档:undef NULL values are represented by undefined values in Perl - Quentin
小心将NULL作为绑定参数传递。一些数据库可能不会按照您的期望执行,并且需要使用“where x is null”和“where x =?”而NULL参数并不总是相同的。我曾经在多年前的dbi-users讨论中撰写了一篇摘要,网址为http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_2.html#nulls。 - bohica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接