如何传递NULL数据类型?

发布于 2024-07-25 17:33:38 字数 48 浏览 4 评论 0原文

将无数据的值传递到数据库时,NULL 的数据类型是什么?

What is the datatype for NULL when passing that value for no data into a database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

同展鸳鸯锦 2024-08-01 17:33:38

存在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?

一曲琵琶半遮面シ 2024-08-01 17:33:38

Null 在 SQL 中没有特定的数据类型。 任何可为空的列或变量都可以包含 null。 Null 永远不会等于或不等于任何东西。 您可以将持有 null 的变量转换为另一个变量并获取 null,例如:

declare @a integer
set @a = null
select convert (float, @a)

----------------------
NULL

(1 row(s) affected)

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:

declare @a integer
set @a = null
select convert (float, @a)

----------------------
NULL

(1 row(s) affected)
送你一个梦 2024-08-01 17:33:38

通常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"

雨落星ぅ辰 2024-08-01 17:33:38

NULL 的数据类型与 0 的数据类型一样没有意义:它可以是 INTEGERFLOATVARCHAR。 你不能仅从价值来判断。

NULL 在几乎所有数据类型域中都是合法值,这意味着不存在实际值。

脱离特定 RDBMS 的上下文来讨论数据类型也是没有意义的。

例如,在 SQLite 中,数据类型是值绑定的,而不是列绑定的,并且 NULL 本身就是一流的数据类型。

Oracle中,数据类型的定义更加严格。 例如,此查询有效:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS DATE) i
        FROM    dual
        ) q

而此查询无效:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS NUMBER) i
        FROM    dual
        ) q

,因为后一个查询返回两列不同数据类型,它们的值均为 NULL,而 COALESCE 需要两者参数具有相同的数据类型。

更好的说法是任何数据类型的 NULL 都可以隐式转换为另一种数据类型的 NULL

例如,如果 VARCHAR 的值为 0,则可以隐式转换为 INTEGER,但如果其值为 ,则不能隐式转换为 INTEGER 'some_string'

对于NULL's,任何数据类型都可以隐式转换为任何其他数据类型,如果它们之间的隐式转换被允许的话。

Datatype for NULL is as meaningless as datatype for 0: it can be INTEGER, FLOAT or a VARCHAR. 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, and NULL is a first-class datatype per se.

In Oracle, the datatypes are more strictly defined. For instance, this query works:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS DATE) i
        FROM    dual
        ) q

and this does not:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS NUMBER) i
        FROM    dual
        ) q

, because the latter query returns two columns of different datatypes, both of them having values of NULL, and COALESCE requires both arguments to have same datatype.

It's better to say that a NULL of any datatype can be implicitly converted to a NULL on another datatype.

For instance, a VARCHAR can be implicitly converted to a INTEGER if it has value of 0, 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.

风蛊 2024-08-01 17:33:38

在 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.

红ご颜醉 2024-08-01 17:33:38

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.

三五鸿雁 2024-08-01 17:33:38

我认为DBNULL或NULL是一种特殊类型。

I think DBNULL or NULL is a special type.

兮子 2024-08-01 17:33:38

我认为这个问题本身就失败了。 如果 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.

生死何惧 2024-08-01 17:33:38

实际上,在 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 :)

深海蓝天 2024-08-01 17:33:38

通常 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 like NULL IS NULL may fail. Here, NULL must be given a type, the expected type of the target that processes the NULL 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.

烦人精 2024-08-01 17:33:38

Prabhahar,每种类型的数据库驱动程序都有自己的处理NULL的方式。 您必须检查特定数据库的驱动程序 API。

例如,如果您使用 Java Derby 数据库,只需传入 Java 本机类型 null,如 Ian Bjorhovde 对“Derby 的 NULL 值处理”的回答

insert into T_AUTHOR (
  ID, FIRST_NAME, LAST_NAME, 
  DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS) 
VALUES ( 
  1000, 'Lukas', 'Eder', 
  '1981-07-10', null, null 
);

这是 JDBC:向整数列插入 null:

pst.setNull(4, java.sql.Types.INTEGER);

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":

insert into T_AUTHOR (
  ID, FIRST_NAME, LAST_NAME, 
  DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS) 
VALUES ( 
  1000, 'Lukas', 'Eder', 
  '1981-07-10', null, null 
);

Here is another null example of JDBC:Inserting null to Integer column:

pst.setNull(4, java.sql.Types.INTEGER);
寒冷纷飞旳雪 2024-08-01 17:33:38

NULL 可以强制转换(转换)为任何数据类型,但与 NULL 的数据类型比较始终返回 FALSE

NULL can be cast (converted) to any data type yet data type comparisons with NULL always return FALSE.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文