有时我需要在表中插入一些空值,或更新它们将值设置为NULL.
我这个不能做PostgreSQL文档在其他地方见过,但可以tricket使用默认值:
pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default)
Run Code Online (Sandbox Code Playgroud)
ps:我知道在这个例子中我会得到相同的结果
pg_query("INSERT INTO my_table (col_a) VALUES ('whatever')
Run Code Online (Sandbox Code Playgroud)
但问题来自准备好的陈述:
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, default)");
pg_exec($pgconn, 'insert_null_val', array('whatever'));
//this works, but
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)");
pg_exec($pgconn, 'insert_null_val', array('whatever', 'NULL'));
//insert into the table the string 'NULL'.
//instead using array('whatever', '') it assume the col_b as empty value, not NULL.
Run Code Online (Sandbox Code Playgroud)
更新查询也会出现同样的问题.
我认为有一个解决方案,因为pgmyadmin可以做到(或者看起来像它可以),并且我写的是php(我不认为它不会使用准备好的语句)
如果你想知道为什么我需要在我的表中使用空值,让我举一个例子(也许有一个比null值更好的方法):假设我有用户表,并且电子邮件col:这个可以为空,但是是唯一的索引.2空电子邮件是相同的并且违反了唯一约束,而2个NULL值不相等并且可以共存.