Some DBMS (like Oracle) treats empty string (''
) as NULL
. Others (like MySQL, PostgreSQL, etc) treat empty string and NULL
as different.
PostgreSQL treats ''
as empty string, not NULL
, so your insert
statement executed successfully.
문제
I'm developing my first ever application with PostgreSQL.
This is what my table "person" looks like:
Column | Type | Modifiers
------------+-----------------------------+-----------------------------------------------------
id | bigint | not null default nextval('person_id_seq'::regclass)
first_name | character varying(255) | not null
last_name | character varying(255) | not null
email | character varying(255) | not null
password | character varying(255) | not null
created_at | timestamp without time zone |
updated_at | timestamp without time zone |
Indexes:
"person_pkey" PRIMARY KEY, btree (id)
"person_email_unique" UNIQUE CONSTRAINT, btree (email)
"person_id_unique" UNIQUE CONSTRAINT, btree (id)
Referenced by:
TABLE "access" CONSTRAINT "access_person_id_foreign" FOREIGN KEY (person_id) REFERENCES person(id)
This was created using migrations in knex.schema.
If I run the following query in psql...
insert into person (first_name, last_name, email, password) values ('Max', 'Mustermann', '', '123123123');
I get back INSERT 0 1
and the row is successfully inserted:
id | first_name | last_name | email | password | created_at | updated_at
----+------------+------------+-----------------------------------+----------------+-------------------------+-------------------------
12 | Max | Mustermann | | 123123123 | |
I expect the operation to fail, because no e-mail (NOT NULL) was specified. Why does it not fail?
Thank you very much for your help!
Max
해결책
Some DBMS (like Oracle) treats empty string (''
) as NULL
. Others (like MySQL, PostgreSQL, etc) treat empty string and NULL
as different.
PostgreSQL treats ''
as empty string, not NULL
, so your insert
statement executed successfully.
다른 팁
null
and an empty string are not the same values, by passing in an empty string you have satisfied the requirement.
If you query was
insert into person (first_name, last_name, password)
values ('Max', 'Mustermann', '123123123');
then an error would be thrown because you are not passing in a value for email
Because you didn't pass a null value. You passed an empty string.