2012-05-22 7 views
5

Ich bin MySql in ubuntu 10.10 ausgeführt. Ich erstellte eine Tabelle mit dem Namen 'employee' mit 3 Feldnamen EMPFO, Name und Gehalt. Wenige Entitäten eingefügt. In der Mitte des Prozesses möchte ich Gehaltsattribut wie 'NOT NULL' ändern. I Ändern Sie die Tabelle alsWarum erlaubt MySQL, eine NOT NULL-Spalte auf NULL zu aktualisieren?

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

Abfrage ausgeführt. Ich wollte mit dem Befehl testen,

UPDATE employee SET salary=NULL; 

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

gab auch Warnungen " (Code 1048): Column 'salary' cannot be null " (für jede Zeile wiederholt)

Aber wenn ich meinen Tisch sah, alle Gehälter waren Zeros ('0').

Gleiche Abfragen führen Fehler statt Warnung in WINDOWS XP MySql

ich in beiden INNODB und MYISAM Motoren aber gleiches Ergebnis geprüft. Bitte helfen Sie mir zu wissen, was neben der Verarbeitung passiert ist.

+2

Was ist Ihre Frage? Sie legen Ihr Feld auf "nicht null" fest und legen es auf NULL fest. Es wird wie erwartet auf "0" gesetzt. Was machen sie in dir? Setzen Sie das Feld auf "NULL"? Das wäre verrückt. – Nanne

+0

Was genau meinst du mit "gut in XP"? – Quassnoi

+0

@Nanne und @ Quassnoi In Windows lassen sich keine Nullwerte aktualisieren und die ursprünglichen Gehälter anzeigen, aber hier werden nur Nullen angezeigt. Ja, es mag komisch sein, aber für mich waren die Ergebnisse unerwartet. :) – kik

Antwort

11

Sie müssen SQL_MODE nicht auf strikt auf Ihre Ubuntu-Installation eingestellt haben.

Ausgabe

SET SQL_MODE='STRICT_ALL_TABLES' 

oder

SQL_MODE='STRICT_ALL_TABLES' 

unter [mysqld] zu Ihrem my.cnf auf Ubuntu hinzuzufügen.

+0

+1 Das war toll :) aber wo habe ich meine.cnf Datei in ubuntu? – kik

+0

'/ etc/mysql/my.cnf' Ich glaube, aber Sie sollten besser überprüfen. – Quassnoi

+0

Das war der richtige Pfad, aber es sagt "konnte Datei unter /etc/mysql/my.cnf nicht speichern. Speichern unter einem anderen Namen?" – kik

3

Ich sehe das Problem nicht, Sie setzen die Spalte auf NOT NULL, (die NULL-Werte nicht zulassen) und jetzt lässt es Sie nicht auf NULL setzen, was das erwartete Verhalten wäre.

Der Grund, warum Sie 0 in Ihrem DB haben, ist, weil 0 das Ergebnis der Umwandlung von NULL in einen int wäre.

+0

Das Ergebnis der Umwandlung von 'NULL' in ein' INT' ist ein 'NULL'. – Quassnoi

+0

+1 für fast geklärt. Aber warum funktioniert es nicht in Windows? Warum gibt es Zeros in UBUNTU? :) – kik

+0

Ich denke, Quassnoi hat es genagelt :) – Dunhamzzz

Verwandte Themen