
Zitat von
pepperbob
Meinst du einen "leeren String" oder einen NULL-Value? Im Gegensatz zu anderen Datenbanken (-> oracle) unterscheidet Postgresql zwischen diesen beiden!
Zunächst fügt dein Beispiel einen leeren String ein (also insert into .. values ('') macht genau das was du eigentlich willst).
Das war offensichtlich nicht so der Fall.
Ich nehme an du schaust die Daten über pgadmin3 an. Soweit ich das interpretiere zeigt pgadmin3 die beiden Single-Quotes, um zu verdeutlichen dass es sich um einen "leeren String" handelt.
'' != NULL
Code:
test=*# create table nullen (id serial, t text);
NOTICE: CREATE TABLE will create implicit sequence "nullen_id_seq" for serial column "nullen.id"
CREATE TABLE
Time: 556.603 ms
test=*# insert into nullen values (default, '');
INSERT 0 1
Time: 1.613 ms
test=*# insert into nullen values (default, NULL);
INSERT 0 1
Time: 1.853 ms
test=*# insert into nullen values (default, 'NULL != 0');
INSERT 0 1
Time: 0.947 ms
test=*# select * from nullen;
id | t
----+-----------
1 |
2 |
3 | NULL != 0
(3 rows)
Time: 1.264 ms
test=*# select id, coalesce(t, 'nix') from nullen;
id | coalesce
----+-----------
1 |
2 | nix
3 | NULL != 0
(3 rows)
Time: 1.698 ms
test=*#
Es gibt durchaus Anwendungen, wo es mehr als sinnvoll ist, zwischen '' und NULL zu unterscheiden. Es ging ja auch nicht nur um Text-Felder.
Eine sichere Faustregel ist: lasse NULL Values in Textfeldern nur in OUTER JOINS auftauchen!
Kannst Du das näher erklären?
Andreas
Lesezeichen