Warum meistens Emptystring anstatt NULL?

Warum meistens Emptystring anstatt NULL?

am 28.10.2007 20:06:23 von Alex Peters

Hallo NG!
Mir fällt auf, dass ein großteil von OS Projekten (meistens PHP
Anwendungen) ihre Spalten mit NOT NULL DEFAULT "" anlegen. Doch wo
liegt da der Vorteil? Ist es nicht richtiger, eine Spalte mit NULL zu
initialisieren, wenn diese nicht gefüllt wird? Oder hat das bei MySQL
einen Vorteil, wenn man Emptystring anstatt NULL verwendet?

Gruß
Alex



--

Re: Warum meistens Emptystring anstatt NULL?

am 28.10.2007 22:35:30 von Claus Reibenstein

Alex Peters schrieb:

> Mir fällt auf, dass ein großteil von OS Projekten (meistens PHP
> Anwendungen) ihre Spalten mit NOT NULL DEFAULT "" anlegen.

Du meinst sicher Textspalten, also TEXT, CHAR, VARCHAR etc. Bei
numerischen Spalten bietet sich eher DEFAULT 0 an.

> Doch wo liegt da der Vorteil?

Geringerer Verwaltungsoverhead, da die NULL-Kennung nicht mitgeschleppt
werden muss.

> Ist es nicht richtiger, eine Spalte mit NULL zu initialisieren, wenn
> diese nicht gefüllt wird?

Nein. NULL ist nur dann notwendig, wenn man zwischen einem nicht
gesetzten Wert und einem Leerstring bzw. Nullwert unterscheiden muss.
Ansonsten kann und sollte man darauf verzichten.

> Oder hat das bei MySQL einen Vorteil, wenn man Emptystring anstatt
> NULL verwendet?

Das hat nichts mit dem verwendeten Datenbanksystem zu tun.

Gruß. Claus

Re: Warum meistens Emptystring anstatt NULL?

am 01.11.2007 10:11:10 von newsgroup

Claus Reibenstein schrieb:
> Alex Peters schrieb:
>
>
>>Mir fällt auf, dass ein großteil von OS Projekten (meistens PHP
>>Anwendungen) ihre Spalten mit NOT NULL DEFAULT "" anlegen.

Ist für MySQL technisch möglich, macht meiner Meinung nach aber keinen Sinn
(meine pers. Meinung)

Unter einem anderen DBMS würde Dir sowas aber um die Ohren fliegen
können (siehe unten zB. Oracle).

> Du meinst sicher Textspalten, also TEXT, CHAR, VARCHAR etc. Bei
> numerischen Spalten bietet sich eher DEFAULT 0 an.
>
>
>>Doch wo liegt da der Vorteil?
>
>
[..]
>
>>Oder hat das bei MySQL einen Vorteil, wenn man Emptystring anstatt
>>NULL verwendet?
>
>
> Das hat nichts mit dem verwendeten Datenbanksystem zu tun.
>
> Gruß. Claus

Vorsicht,
Oracle macht keinen Unterschied zwischen Leerstring und NULL.

Das hat den einen Vorteil dass man nicht fragen muss

var = '' or var is null

hat aber auch den Nachteil, dass man nicht zwischen Leerstring und
NIX unterscheiden kann.

Auf jeden Fall sollte man vorsichtig sein, mit der Behautptung

'' is not null ist immer true egal für welches DBMS.

Ansonsten bin ich der Meingung, wenn ich einen Wert nicht kenne, sollte
ich mich raushalten, also auf NULL setzen.


Gruß,
Michael

Re: Warum meistens Emptystring anstatt NULL?

am 01.11.2007 10:57:45 von Claus Reibenstein

Michael König schrieb:

> Claus Reibenstein schrieb:
>
>> Alex Peters schrieb:
>>
>>> Oder hat das bei MySQL einen Vorteil, wenn man Emptystring anstatt
>>> NULL verwendet?
>>
>> Das hat nichts mit dem verwendeten Datenbanksystem zu tun.
>
> Vorsicht,
> Oracle macht keinen Unterschied zwischen Leerstring und NULL.

Dann würde ich mal sagen: Oracle ist kaputt.

Alle Informationen, die ich im Internet gefunden habe, insbesondere der
sehr ausführliche Beitrag ,
unterscheiden zwischen NULL, 0 und ''.

Was sagt denn der SQL-Standard dazu? Den habe ich im Netz leider nicht
finden können.

Gruß. Claus

Re: Warum meistens Emptystring anstatt NULL?

am 01.11.2007 11:55:52 von dnoeth

Claus Reibenstein wrote:

>> Oracle macht keinen Unterschied zwischen Leerstring und NULL.
>
> Dann würde ich mal sagen: Oracle ist kaputt.

Das stimmt und das ist seit Urzeiten auch bekannt:

Note: Oracle Database currently treats a character value with a
length of zero as null. However, this may not continue to be true in
future releases, and Oracle recommends that you do not treat empty
strings the same as nulls.

Oracle hat aber wirklich Glück, dass das Ding bei denen VarChar2 heisst:

Do not use the VARCHAR datatype. Use the VARCHAR2 datatype instead.
Although the
VARCHAR datatype is currently synonymous with VARCHAR2, the VARCHAR
datatype is
scheduled to be redefined as a separate datatype used for
variable-length character
strings compared with different comparison semantics.

Also wird Oracle irgendwann den VarChar implementieren (mit korrekter
Unterscheidung zwischen NULL und Leerstring) und kann den VarChar2 so
kaputt lassen. Das wird sicher komen, da Oracle kompatibel zu SQL:1999
oder SQL:2003 Core Level werden möchte und dazu gehört inzwischen der
VarChar (bei SQL92 war der nicht im Entry Level).

> Was sagt denn der SQL-Standard dazu? Den habe ich im Netz leider nicht
> finden können.

Man findet die PDFs schon (zumindest die Final Draft-Versionen, z.B. bei
http://www.wiscorp.com/SQLStandards.html) aber das Finden alleine nützt
nicht viel, man muss íhn auch lesen und verstehen wollen/können. Wollen
ist ok, aber Können, da hab ich immer meine Probleme, das liest sich
nämlich wie ein Gesetzbuch :-)

Dieter

Re: Warum meistens Emptystring anstatt NULL?

am 01.11.2007 13:40:17 von Claus Reibenstein

Dieter Noeth schrieb:

> Claus Reibenstein wrote:
>
>>> Oracle macht keinen Unterschied zwischen Leerstring und NULL.
>>
>> Dann würde ich mal sagen: Oracle ist kaputt.
>
> Das stimmt und das ist seit Urzeiten auch bekannt:

Danke für die Bestätigung :-)

>> Was sagt denn der SQL-Standard dazu? Den habe ich im Netz leider nicht
>> finden können.
>
> Man findet die PDFs schon (zumindest die Final Draft-Versionen, z.B. bei
> http://www.wiscorp.com/SQLStandards.html) aber das Finden alleine nützt
> nicht viel, man muss íhn auch lesen und verstehen wollen/können. Wollen
> ist ok, aber Können, da hab ich immer meine Probleme, das liest sich
> nämlich wie ein Gesetzbuch :-)

Das scheint ein Grundübel von allen Standards zu sein. Ich habe mich
schon des Öfteren durch diverse beißen dürfen. Der C-Standard war da
noch der verständlichste von allen, und der ist schon schlimm genug.

Ich habe mir die Dokumente mal runtergeladen und werde sie mir mal
anschauen. Inzwischen bin ich da schon etwas abgehärtet :-)

Gruß. Claus