将没有数据的值传递到数据库时,NULL
的数据类型是什么?
答案 0 :(得分:6)
NO 数据类型为NULL。 NULL本身意味着数据的 ABSENCE 。当没有数据时,它怎么会有类型?
答案 1 :(得分:2)
Null在SQL中没有特定的数据类型。任何可以为null的列或变量都可以包含null。 Null永远不等于或不等于任何东西。您可以将保持null的变量转换为另一个变量并获取null,例如:
declare @a integer
set @a = null
select convert (float, @a)
----------------------
NULL
(1 row(s) affected)
答案 2 :(得分:1)
NULL
的数据类型与0
的数据类型无关:它可以是INTEGER
,FLOAT
或VARCHAR
。你无法从价值中分辨出来。
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
的值为INTEGER
,则0
可以隐式转换为'some_string'
,但如果NULL
的值为{{1}}则不能。{/ 1} >
对于{{1}},任何数据类型都可以隐式转换为任何其他数据类型,如果允许它们之间的隐式转换。
答案 3 :(得分:0)
NULL是'undefined'的值。因此,数据库中的任何类型都可以是“未定义”,因为它是列的属性:特定列的行值可以是“未定义”,这意味着它是“NULL”,无论类型是什么。只要列可以为空。
答案 4 :(得分:0)
我认为DBNULL或NULL是一种特殊类型。
答案 5 :(得分:0)
通常NULL是它自己的数据类型 - 类型1是“INTEGER”,NULL类型的类型是“NULL”
答案 6 :(得分:0)
答案 7 :(得分:0)
我认为这个问题会让自己失败。如果NULL具有数据类型,则不会强制您在其默认值之外的每个实例化时更改它。例如,当您将其创建为角色,然后将其强制转换为对象的值?
NULL==NULL
就是这样。
答案 8 :(得分:0)
实际上,在PowerShell中比较$ null -eq $ null给出了False。 另外,-not $ null会给你True,所以在这里它似乎被表示为False。我知道,PowerShell可能不是一个很好的例子,但仍然是:)
答案 9 :(得分:0)
在SQL中,NULL是一个可以应用于任何SQL类型的“标记”(不是值)。所以它与类型正交。
答案 10 :(得分:0)
通常SQL NULL
没有与之关联的类型。但也有例外。数据库引擎postgresql和derby(javadb)要求null具有类型。换句话说,它们不支持无类型的null。因此NULL IS NULL
等查询条件可能会失败。这里,必须为NULL
提供一个类型,即处理NULL
值的目标的预期类型。在这种情况下,这看起来很愚蠢,因为没有目标,这可能适得其反。
请参阅CAST function: -- you must cast NULL as a data type to use it
请参阅Queries with guarded null Parameter fail和Add support for setObject(arg, null)
请为这些问题投票,以便奇怪的数据库引擎改变他们的方式。
答案 11 :(得分:0)
Prabhahar,每种类型的数据库驱动程序都有自己的处理方式NULL
。您必须检查特定数据库的驱动程序API。
例如,如果您使用的是Java Derby数据库,只需传入Java本机类型,如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
);
以下是JDBC:Inserting null to Integer column的另一个null
示例:
pst.setNull(4, java.sql.Types.INTEGER);
答案 12 :(得分:-1)
NULL
可以转换(转换)为任何数据类型,但与NULL
的数据类型比较始终返回FALSE
。