Обсуждение: '' != NULL in PostGres???
Hello. I am experimenting with Postgresql-6.3.2 on a RedHat 5.1 DEC Alpha:
nuacct=> create table users (
nuacct-> recno int,
nuacct-> custid int unique,
nuacct-> username char(14) not null,
nuacct-> service int
nuacct-> );
NOTICE: CREATE TABLE/UNIQUE will create implicit index users_custid_key
for table users
CREATE
nuacct=> insert into users values
nuacct-> ( 0, 0, '', 0 );
INSERT 18241 1
??? Shouldn't that have failed, generating an error ???
nuacct=> select * from users where username is null;
recno|custid|username|service
-----+------+--------+-------
(0 rows)
nuacct=> select * from users where username = '';
recno|custid| username|service
-----+------+--------------+-------
0| 0| | 0
(1 row)
nuacct=> \d users
Table = users
+----------------------------------+------------------------------+------+
| Field | Type |Length|
+----------------------------------+------------------------------+------+
| recno | int4 |4 |
| custid | int4 |4 |
| username | char() not null |14 |
| service | int4 |4 |
+----------------------------------+------------------------------+------+
???
nuacct=> create table users ( nuacct-> recno int, nuacct-> custid int unique, nuacct-> username char(14) not null, nuacct-> service int nuacct-> ); nuacct=> insert into users values nuacct-> ( 0, 0, '', 0 ); INSERT 18241 1 ??? Shouldn't that have failed, generating an error ??? No, but this will: nuacct=> insert into users values ( 0, 0, null, 0 ); '' is a zero length string not a null. Cheers, Brook
> nuacct=> create table users (
> nuacct-> recno int,
> nuacct-> custid int unique,
> nuacct-> username char(14) not null,
> nuacct-> service int
> nuacct-> );
>
> nuacct=> insert into users values
> nuacct-> ( 0, 0, '', 0 );
> INSERT 18241 1
>
> ??? Shouldn't that have failed, generating an error ???
>
> No, but this will:
>
> nuacct=> insert into users values ( 0, 0, null, 0 );
>
> '' is a zero length string not a null.
I wonder,
Would
insert into users (recno, custid, service) values (0, 0, 0);
also fail? As far as I can tell, if you don't expressly populate the
field, it will remain as a null....
--
Colin Dick
On Call Internet Services
cdick@mail.ocis.net
> I wonder, > Would > > insert into users (recno, custid, service) values (0, 0, 0); > > also fail? As far as I can tell, if you don't expressly populate the > field, it will remain as a null.... I believe that would should fail unless he has set some sort of default value for the field...james