2012-11-05 6 views

Antwort

13

Sie würden das Stichwort verwenden unsigned um anzuzeigen, dass die ganze Zahl nicht ein „Zeichen“ (dh - es kann nur positiv sein) erlaubt :

CREATE TABLE test (
    test_column int(11) unsigned 
); 

Sie mehr über die numerischen Datentypen lesen können here (& unsigned unterzeichnet).

bis zu einem tatsächlich constraint die einschub von negativen Werten zu verhindern, hat MySQL eine CHECK Klausel, die in der CREATE TABLE Anweisung verwendet werden kann, aber nach der Dokumentation:

Die CHECK Die Klausel wird analysiert, aber von allen Speicher-Engines ignoriert.

Als Referenz hier ist, wie Sie es verwenden würden (und obwohl es absolut in Ordnung ausgeführt wird, tut es einfach nichts - wie die manuellen Zustände):

CREATE TABLE test (
    test_column int(11) unsigned CHECK (test_column > 0) 
); 

UPDATE (Ablehnung negative Werte vollständig)
Ich habe aus einigen Ihrer Kommentare bemerkt, dass Sie möchten, dass Abfragen mit negativen Werten vollständig zurückgewiesen werden und nicht auf 0 gesetzt werden (wie eine normale Transaktion in eine unsigned Spalte tun würde). Es gibt keine Einschränkung, die dies im Allgemeinen tun kann (die ich zumindest kenne), aber wenn Sie strict-mode einschalten (mit STRICT_TRANS_TABLES), wird jede Abfrage, die einen negativen Wert in eine vorzeichenlose Spalte einfügt, mit einem Fehler fehlschlagen (zusammen mit anderen Dateneinfügungsfehlern, wie z. B. einem ungültigen Wert enum).

Sie können es testen, indem Sie den folgenden Befehl vor Ihrem Einsatz-Befehle ausführen:

SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES'; 

Und wenn es für Sie arbeitet, können Sie entweder aktualisieren Sie Ihre MySQL-Konfigurations mit sql-mode="STRICT_TRANS_TABLES" oder verwenden SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES'; (ich bin nicht sicher, ob sich der Befehl SET auf die globale mysql-Konfiguration auswirkt, daher ist es möglicherweise besser, die eigentliche Konfigurationsdatei zu aktualisieren.

+3

'unsigned <<> positiv. 'unsigned' == nicht negativ. Diese – maxhb

0

Sie sollten den Datentyp UNSIGNED INTEGER verwenden. Weitere Informationen finden Sie unter click here

0

Die Lösung besteht darin, MySQL Server explizit anzuweisen, eine Ganzzahl ohne Vorzeichen zu erstellen.

CREATE TABLE tbl_example ( 
example_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
example_num INT UNSIGNED NOT NULL, 
example_text TEXT 
PRIMARY KEY (`example_id`) 
); 
+0

ist, was ich, wenn ich unten Anweisungen auf meinem lokalen MySQL-Server 'mysql laufen> Einfügen in die Welt Werte (-2);' ' Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,01 sec)' – user462455

1

Verwenden Sie einfach unsigned, um nur positive Werte zuzulassen.

CREATE TABLE hello 
(
    world int unsigned 
); 

Kommentar- der Zeile und Sie erhalten die Fehlermeldung, siehe: Datenabschneide: Bereich Wert für Spalte 'Welt' in Zeile 1:

+0

Aber Mit dem Typ ohne Vorzeichen können Sie weiterhin negative Ganzzahlen einfügen (negative Ganzzahlen werden in null konvertiert). Es gibt zwar eine Warnung aus, aber die Abfrage übergibt immer noch – user462455

+0

Dies ist, was ich bekomme, wenn ich unter Anweisungen auf meinem lokalen mysql-Server Mysql> einfügen in Weltwerte (-2); ' ' Abfrage OK, 1 Zeile betroffen , 1 Warnung (0,01 Sek.) ' – user462455

Verwandte Themen