2013-02-26 1 views
0

Je m'attendais à ce que cela échoue, mais à la place, il efface les données existantes et les remplace par une chaîne vide. Est-ce que c'est un comportement correct? Dans ce cas, est-il un travail autour de forcer une erreur à la placeUne tentative de mise à jour d'un champ CHAR NULL NOT NULL définit le champ sur une chaîne vide plutôt que d'échouer. Est-ce le comportement correct

Par exemple,

CREATE TABLE testtable 
    (columna VARCHAR(30) NOT NULL, 
    columnb VARCHAR(2) NULL, 
    columnc VARCHAR(10) NULL); 

INSERT INTO testtable (columna, columnb, columnc) 
VALUES ('first entry', '1', null), 
    ('second entry', '2', null), 
    ('third entry', '3', null); 

INSERT INTO testtable (columna, columnb, columnc) 
VALUES (null, '4', null); 

Cela échoue avec l'erreur Code d'erreur: 1048. Colonne « Columna » ne peut pas être nulle qui est ce que j'attendais .

Cependant,

UPDATE testtable 
SET columna = null WHERE columnb = '2'; 

remplace le contenu de columna avec une chaîne vide

Select * from testtable; 

first entry 1 
      2 
third entry 3 

Répondre

0

ont trouvé que c'est en baisse au mode sql. En définissant

SET GLOBAL sql_mode = 'TRADITIONAL'; 

la base de données fonctionne maintenant comme je l'aurais attendu et rejette les valeurs non valides.

Questions connexes