如何传递NULL数据类型?
将无数据的值传递到数据库时,NULL
的数据类型是什么?
What is the datatype for NULL
when passing that value for no data into a database?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
将无数据的值传递到数据库时,NULL
的数据类型是什么?
What is the datatype for NULL
when passing that value for no data into a database?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(13)
存在NO NULL 数据类型。 NULL 本身意味着数据不存在。 当没有数据时,它怎么会有类型呢?
There is NO data type of NULL. NULL itself means ABSENCE of data. When there is no data, how can it have type?
Null 在 SQL 中没有特定的数据类型。 任何可为空的列或变量都可以包含 null。 Null 永远不会等于或不等于任何东西。 您可以将持有 null 的变量转换为另一个变量并获取 null,例如:
Null does not have a specific data type in SQL. Any nullable column or variable can contain null. Null is never equal or unequal to anything. You can cast a variable holding null to another variable and get null, for example:
通常NULL是它自己的数据类型——1的类型是“INTEGER”,NULL的类型是“NULL”
Usually NULL is its own datatype - the type of 1 is "INTEGER", the type of the type of NULL is "NULL"
NULL
的数据类型与0
的数据类型一样没有意义:它可以是INTEGER
、FLOAT
或VARCHAR
。 你不能仅从价值来判断。NULL
在几乎所有数据类型域中都是合法值,这意味着不存在实际值。脱离特定 RDBMS 的上下文来讨论数据类型也是没有意义的。
例如,在 SQLite 中,数据类型是值绑定的,而不是列绑定的,并且 NULL 本身就是一流的数据类型。
在
Oracle
中,数据类型的定义更加严格。 例如,此查询有效:而此查询无效:
,因为后一个查询返回两列不同数据类型,它们的值均为
NULL
,而COALESCE
需要两者参数具有相同的数据类型。更好的说法是任何数据类型的
NULL
都可以隐式转换为另一种数据类型的NULL
。例如,如果
VARCHAR
的值为0
,则可以隐式转换为INTEGER
,但如果其值为,则不能隐式转换为
。INTEGER
'some_string'对于
NULL
's,任何数据类型都可以隐式转换为任何其他数据类型,如果它们之间的隐式转换被允许的话。Datatype for
NULL
is as meaningless as datatype for0
: it can beINTEGER
,FLOAT
or aVARCHAR
. You cannot tell it just from the value.NULL
is legitimate value in almost every datatype domain, which means the absence of actual value.It's also meaningless to discuss datatypes out of context of certain
RDBMS
.In
SQLite
, for instance, datatypes are value-bound, not column-bound, andNULL
is a first-class datatype per se.In
Oracle
, the datatypes are more strictly defined. For instance, this query works:and this does not:
, because the latter query returns two columns of different datatypes, both of them having values of
NULL
, andCOALESCE
requires both arguments to have same datatype.It's better to say that a
NULL
of any datatype can be implicitly converted to aNULL
on another datatype.For instance, a
VARCHAR
can be implicitly converted to aINTEGER
if it has value of0
, but cannot if it has value of'some_string'
.For
NULL
's, any datatype can be implicitly converted to any other datatype, if the implicit conversion between them is allowed at all.在 SQL 中,NULL 是一个“标记”(值以外的东西),可以应用于任何 SQL 类型。 所以它与打字是正交的。
In SQL a NULL is a "mark" (something other than a value) that can apply to any SQL type. So it is orthogonal to type.
NULL 是“未定义”的值。 因此,数据库中的任何类型都可以是“未定义”,因为它是列的属性:特定列的行值可以是“未定义”,这意味着它是“NULL”,无论类型是什么。 只要该列可以为空。
NULL is the value for 'undefined'. So any type in a database can be 'undefined', as it's a property of the column: a value of a row for the specific column can be 'undefined' which means it's 'NULL', no matter what the type is. As long as the column is nullable.
我认为DBNULL或NULL是一种特殊类型。
I think DBNULL or NULL is a special type.
我认为这个问题本身就失败了。 如果 NULL 有一个数据类型,那么您是否会被迫在其默认值之外的每个实例化中更改它。 例如,当您将其创建为角色,然后将其强制转换为对象的值时?
NULL==NULL
仅此而已。
I think the question defeats itself. If NULL had a datatype, wouldn't you be forced to change it with every instantiation outside of its default. For example, when you create it as a character, but then force it into an object's value?
NULL==NULL
That is all.
实际上,在 PowerShell 中比较 $null -eq $null 给出 False。
另外,-not $null 会给你 True,所以这里它似乎被表示为 False。 我知道,PowerShell 可能不是一个很好的例子,但仍然:)
Actually, in PowerShell comparing $null -eq $null gives False.
Also, -not $null will give you True, so here it seems to be reprezented as False. I know, PowerShell might not be a good example, but still :)
通常 SQL
NULL
没有与之关联的类型。 但也有例外。 数据库引擎 postgresql 和 derby (javadb) 要求 null 具有类型。 换句话说,它们不支持无类型空值。 因此像NULL IS NULL
这样的查询条件可能会失败。 这里,必须给NULL
一个类型,即处理NULL
值的目标的预期类型。 在这种情况下,这看起来很愚蠢,因为没有目标,而且可能会适得其反。请参阅 CAST 函数: -- 您必须将 NULL 转换为数据类型才能使用它
请参阅带有受保护的 null 参数的查询失败 和 添加对 setObject(arg, null) 的支持
请为这些问题投票,以便奇怪的数据库引擎改变他们的方式。
Usually SQL
NULL
does not have a type associated with it. However there are exceptions. Database engines postgresql and derby (javadb) require that null has a type. In other words they do not support untyped null. So query conditions likeNULL IS NULL
may fail. Here,NULL
must be given a type, the expected type of the target that processes theNULL
value. In this case this appears silly because there is no target and this can be counterproductive.See CAST function: -- you must cast NULL as a data type to use it
See Queries with guarded null Parameter fail and Add support for setObject(arg, null)
Please vote for these issues so that the odd database engines change their ways.
Prabhahar,每种类型的数据库驱动程序都有自己的处理
NULL
的方式。 您必须检查特定数据库的驱动程序 API。例如,如果您使用 Java Derby 数据库,只需传入 Java 本机类型 null,如 Ian Bjorhovde 对“Derby 的 NULL 值处理”的回答:
这是 JDBC:向整数列插入 null:
Prabhahar, each type of database driver has its own way of handling
NULL
. You will have to examine the driver API for the specific database.For example if you are using the Java Derby database, simply pass in the Java native type, null as shown in Ian Bjorhovde's answer to "Derby's Handling of NULL Values":
Here is another
null
example of JDBC:Inserting null to Integer column:http://en.wikipedia.org/wiki/Null_(SQL)
http://en.wikipedia.org/wiki/Null_(SQL)
NULL
可以强制转换(转换)为任何数据类型,但与NULL
的数据类型比较始终返回FALSE
。NULL
can be cast (converted) to any data type yet data type comparisons withNULL
always returnFALSE
.