2012-10-03 9 views
6

Ich möchte null in einer Spalte in einer Tabelle einfügen.Welcher steht für null? undef oder leere Zeichenfolge

Welcher steht für null? undef oder leere Zeichenfolge ''.

Welcher sollte verwendet werden und warum? Ich weiß über defined und dass ich es überprüfen kann.

Aber ich suche mehr aus Perspektive der Datenbank.

Welche repräsentiert null richtiger?

Update: Ich verwende DBI Modul.

Antwort

9

DBI verwendet undef, um eine SQL NULL darzustellen. Die leere Zeichenfolge repräsentiert eine leere Zeichenfolge.

Einige Datenbanken unterscheiden jedoch nicht zwischen NULL und der leeren Zeichenfolge. Oracle is a particular offender here. DBI kann nichts dagegen tun.

8

Angenommen, Perl DBI, undef repräsentiert eine SQL NULL.

Eine leere Zeichenfolge in Perl entspricht exakt der gleichen (d. H. Eine leere Zeichenfolge) in SQL.

+0

Wenn beide "NULL" darstellen, dann welche? –

+2

@Drt, sie * nicht * beide repräsentieren 'NULL'. 'undef' tut es. – Axeman

+0

@Axeman und @ Alnitak..Wenn ich '* aus Tabellenname wählen, wo Spaltenname Null ist. Ich bekomme jeweils die gleichen Zeilen. :( –

4

Vorausgesetzt, dass Sie den DBI-Modul verwenden, und verwenden gebundene Argumente (da, wenn Sie die SQL von Hand bauen, Sie NULL im String verwenden würden):

undefinierte Werte oder undef sind Wird verwendet, um NULL-Werte anzugeben.

Siehe the perldoc for DBI

Wenn Sie nicht direkt mit DBI (z Sie DBIx :: Klasse oder eine andere ORM verwenden), dann werden Sie wahrscheinlich feststellen, dass es das Verhalten von DBI für diese erbt.

+0

Also, wenn ich 'Select' Anweisung auf dieser Spalte ausführen, was wird Es gibt für undef wieder –

+0

Da es nicht "undef" darin haben wird, macht diese Frage keinen Sinn. Wenn es NULL ist, dann werden Sie "undef" out. Siehe die Dokumentation, auf die ich Sie in meinem zeigte antwort: [undef Nullwerte werden durch undefinierte Werte in Perl dargestellt] (ht tp: //search.cpan.org/dist/DBI/DBI.pm#Notation_andConventions) – Quentin

+0

Seien Sie vorsichtig, indem Sie NULL als gebundenen Parameter übergeben.Einige Datenbanken werden nicht das tun, was Sie erwarten und benötigen "where x ist null" und "where x =?" und ein NULL-Parameter ist nicht immer derselbe. Ich habe eine Zusammenfassung der Diskussion über dbi-Benutzer vor Jahren unter http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_2.html#nulls geschrieben – bohica

Verwandte Themen