Ago 11

MySQL – gestione degli errori in inserimenti con valori nulli

Spread the love

mysqlSe cerchiamo di inserire dei valori nulli in un campo di una tabella dichiarato NOT NULL, il comportamento del DBMS MySQL è diverso a seconda della query che lanciamo, sulla base di un parametro di configurazione del server.

 

 

 

 

Ad esempio questa query cerca di inserire un valore null in una campo dichiarato not null (user_id):

insert into playlist(name, user_id) values ('ooo', null)

risultando in un errore:

Error Code: 1048. Column 'user_id' cannot be null

Ma se il campo non lo citiamo proprio:

insert into playlist(name) values ('ooo')

viene generato solamente un warning:

1 row(s) affected, 1 warning(s): 1364 Field 'user_id' doesn't have a default value

ed il record viene inserito lo stesso e viene forzato il valore del campo a 0 (se il campo è di tipo numerico) o a stringa vuota (se il campo è di testo).

Per evitare questo comportamento ed avere un comportamento coerente (errore in ogni caso) si deve modificare la proprietà sql_mode del DBMS :

set sql_mode = 'TRADITIONAL';

nel mio DBMS era impostata di fabbrica a

> select @@sql_mode

> NO_ENGINE_SUBSTITUTION

che è la proprietà che consente di NON sostituire automaticamente con InnoDB il motore di default in caso di non dichiarazione nelle istruzioni DDL come create table o alter table.

Per maggiori informazioni sui valori della variabile sql_mode e sulle combinazioni di valori, consultare il sito MySQL.

 

 

Lascia un commento

Your email address will not be published.