2012-05-22 7 views
5

Sono in esecuzione MySql in ubuntu 10.10. Ho creato un tavolo chiamato 'employee' con 3 nomi di campo empno, nome e stipendio. Inserito poche entità. Nel mezzo del processo voglio cambiare l'attributo retribuzione come 'NOT NULL'. I Alter the table comePerché MySQL consente di aggiornare una colonna NOT NULL su NULL?

ALTER TABLE employee MODIFY salary int(10) NOT NULL; 

Query eseguita. Ho voluto mettere alla prova utilizzando il comando,

UPDATE employee SET salary=NULL; 

Query OK, 15 rows affected, 15 warnings (0.06 sec) 
Rows matched: 15 Changed: 15 Warnings: 15 

anche dato avvertimenti " (Code 1048): Column 'salary' cannot be null " (ripetuto per ogni riga)

Ma quando ho visto mio tavolo, tutti gli stipendi sono stati Zeros ('0').

stesse query risultato in errore invece di avviso in di WINDOWS XP MySql

ho controllato in entrambi i motori InnoDB e MyISAM, ma stesso risultato. Ti prego di aiutarmi a sapere cosa è successo dopo l'elaborazione.

+2

Qual è la tua domanda? Imposta il tuo campo su 'not null' e lo imposti su NULL. L'impostazione predefinita sarà '0' come previsto. Cosa stanno facendo in Windows secondo te? Impostare il campo su 'NULL'? Sarebbe strano – Nanne

+0

Cosa intendi esattamente per "lavorare bene in XP"? – Quassnoi

+0

@Nanne e @ Quassnoi In Windows non consente l'aggiornamento di valori nulli e mostra gli stipendi originali, ma qui mostra tutti gli zeri. Sì, potrebbe essere strano ma per me i risultati sono stati inaspettati. :) – kik

risposta

11

Non è necessario impostare SQL_MODE su rigoroso sull'installazione di ubuntu.

Problema

SET SQL_MODE='STRICT_ALL_TABLES' 

o aggiungere

SQL_MODE='STRICT_ALL_TABLES' 

sotto [mysqld] al vostro my.cnf su Ubuntu.

+0

+1 E 'stato fantastico :) ma dove ho trovato il file my.cnf in ubuntu? – kik

+0

'/ etc/mysql/my.cnf' Credo, ma è meglio controllare. – Quassnoi

+0

Questo era il percorso corretto ma sta dicendo "impossibile salvare il file in /etc/mysql/my.cnf. Salva con un nome diverso?" – kik

3

Non vedo il problema, si imposta la colonna su NOT NULL, (che non consente valori NULL) e ora non consente di impostarla su NULL, che sarebbe il comportamento previsto.

Il motivo per cui si dispone di 0 nel DB è perché 0 sarebbe il risultato del cast NULL in un int.

+0

Il risultato del lancio di 'NULL' su un' INT' è un 'NULL'. – Quassnoi

+0

+1 per chiarire quasi. Ma perché non funziona allo stesso modo in Windows? perché sta dando Zeros in UBUNTU? :) – kik

+0

Penso che Quassnoi l'abbia inchiodato :) – Dunhamzzz

Problemi correlati