2009-06-26 8 views

Antwort

0

NULL ist der Wert für 'undefiniert'. Daher kann jeder Typ in einer Datenbank 'undefiniert' sein, da es eine Eigenschaft der Spalte ist: Ein Wert einer Zeile für die spezifische Spalte kann 'undefiniert' sein, was bedeutet, dass sie 'NULL' ist, unabhängig vom Typ. Solange die Spalte nullfähig ist.

5

Es gibt NO Datentyp NULL. NULL selbst bedeutet ABWESENHEIT von Daten. Wenn es keine Daten gibt, wie kann es geben?

+1

Ja, das war es, was ich lernen musste, als ich zu meiner Firma kam. NULL ist die Abwesenheit, es ist kein Typ, aber es kann durch Typen dargestellt werden (d. H. Das .NET-Framework hat DBNull.Value als eine Darstellung des NULL-Werts). – Kezzer

+1

Ja stimme ich zu. In jeder Technologie müssen Sie * etwas * haben, um es darzustellen. (Sie können nichts mit nichts darstellen). Aber als Konzept bedeutet NULL "nichts". Buchstäblich! – Hemant

+0

@Hemant, während das eine gute Datenbankdefinition von NULL ist, wird dieses abstrakte Konzept durch einen tatsächlichen Wert dargestellt. Unter der Annahme, dass Prabhahar den Wert in einer Programmiersprache an die Datenbank übergeben will, wird es eine zugehörige Datenbanktreiber-API geben, die eine Implementierung von NULL übergeben wird. – MAbraham1

0

normalerweise NULL ist, sein eigener Datentyp - die Art von 1 „integer“, die Art des Typs NULL ist „NULL“

0

Ich denke, die Frage selbst besiegt. Wenn NULL einen Datentyp hätte, wären Sie nicht gezwungen, ihn bei jeder Instanziierung außerhalb seines Standardwerts zu ändern. Zum Beispiel, wenn Sie es als ein Zeichen erstellen, aber dann in den Wert eines Objekts erzwingen?

NULL==NULL

Das ist alles.

+0

Es bestand die Gefahr, dass die meisten Plattformen, die NULL unterstützen, NULL an den Vergleich "NULL == NULL" zurückgeben würden. Dies macht Ihren obigen Vergleich ungültig, da der Vergleich mit NULL ohne Bedeutung ist es ist null mit ...IS NULL –

+0

Das hat mich zum Lächeln gebracht und ich sehe was du sagst. Kreieren Sie einen, um etwas Neues zu lernen ** jeden Tag. – bobby

-1

NULL kann in einen beliebigen Datentyp umgewandelt (umgewandelt) werden, aber Datentypvergleiche mit NULL geben immer FALSE zurück.

+0

-1, weil Vergleiche mit NULL zu NULL und nicht zu FALSE führen. In einer IF-Anweisung in PL/SQL wird NULL wie FALSE behandelt, aber NOT NULL ist NULL, nicht TRUE –

+0

Das gleiche gilt für WHERE-Klauseln usw. –

1

Datentyp für NULL ist ebenso sinnlos wie Datentyp für 0: es INTEGER sein kann, FLOAT oder ein VARCHAR. Sie können es nicht nur vom Wert unterscheiden.

NULL ist legitimer Wert in fast jeder Datentypdomäne, was bedeutet, dass der tatsächliche Wert fehlt.

Es ist auch sinnlos, Datentypen außerhalb des Kontextes bestimmter RDBMS zu diskutieren.

In SQLite zum Beispiel, Datentypen sind Wert gebunden, nicht spaltengebunden, und NULL ist ein First-Class-Datentyp per se.

In Oracle sind die Datentypen strenger definiert. Zum Beispiel diese Abfrage funktioniert:

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

und dies nicht:

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

, da diese Abfrage zwei Säulen unterschiedlicher Datentypen zurückgibt, beide mit Werten von NULL und COALESCE erfordert sowohl Argumente, um denselben Datentyp zu haben.

Es ist besser zu sagen, dass ein NULL eines beliebigen Datentyps implizit in eine NULL für einen anderen Datentyp konvertiert werden kann.

Zum Beispiel kann ein VARCHAR kann implizit in ein INTEGER umgewandelt werden, wenn sie Wert von 0 haben, kann aber nicht, ob es Wert 'some_string' hat.

Für NULL kann jeder Datentyp implizit in einen anderen Datentyp konvertiert werden, wenn die implizite Konvertierung zwischen ihnen überhaupt erlaubt ist.

2

Null hat keinen spezifischen Datentyp in SQL. Jede nullwertfähige Spalte oder Variable kann null enthalten. Null ist niemals gleich oder ungleich allem. Sie können eine Variable Halte null auf eine andere Variable gegossen und null erhalten, zum Beispiel:

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

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

(1 row(s) affected) 
0

Eigentlich in Powershell zu vergleichen $ null -eq $ null gibt Falsch. Außerdem wird -not $ null Ihnen True geben, daher wird es hier als False dargestellt. Ich weiß, PowerShell ist vielleicht kein gutes Beispiel, aber immer noch :)

0

In SQL ist ein NULL ein "Zeichen" (etwas anderes als ein Wert), das für jeden SQL-Typ gelten kann. Es ist also orthogonal zum Typ.

0

Normalerweise ist SQL NULL kein Typ zugeordnet. Es gibt jedoch Ausnahmen. Die Datenbankmodule postgresql und derby (javadb) verlangen, dass null einen Typ hat. Mit anderen Worten, sie unterstützen nicht typisiertes null. Daher können Abfragebedingungen wie NULL IS NULL fehlschlagen. Hier muss NULL ein Typ angegeben werden, der erwartete Typ des Ziels, das den Wert NULL verarbeitet. In diesem Fall erscheint das albern, weil es kein Ziel gibt und das kann kontraproduktiv sein.

Siehe CAST function: -- you must cast NULL as a data type to use it

Siehe Queries with guarded null Parameter fail und Add support for setObject(arg, null)

stimmen Sie bitte für diese Probleme, so dass die ungeraden Datenbank-Engines ihre Gewohnheiten zu ändern.

0

Prabhahar, jede Art von Datenbanktreiber hat seine eigene Art der Handhabung NULL. Sie müssen die Treiber-API für die spezifische Datenbank untersuchen.

Zum Beispiel, wenn Sie die Java-Derby-Datenbank verwenden, einfach in dem Java-nativen Typ passieren, null wie in Ian Bjorhovde's answer to "Derby's Handling of NULL Values" gezeigt:

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 
); 

Hier ist ein weiteres null Beispiel JDBC:Inserting null to Integer column:

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