Wie ich SET
cust_fax in einer Tabelle in MySQL wie folgt:
cust_fax integer(10) NOT NULL,
und dann füge ich einen Wert wie folgt ein:
INSERT INTO database values ('3172978990');
aber dann heißt es
`Fehler 1264` hat keinen Wert für die Spalte
Und ich möchte wissen, wo der Fehler liegt? Mein Set? Oder andere?
Jede Antwort wird geschätzt!
'3172978990'
ist eine Zeichenfolge,3172978990
ist eine Zahl. Übrigens. die10
inint(10)
sich nicht definieren beliebigen Datentyp constraint. Es ist nur ein Hinweis zur Clientanzeige .Antworten:
Der Wert 3172978990 ist größer als 2147483647 - der Maximalwert für
INT
- daher der Fehler. Hier sind MySQL-Integer-Typen und ihre Bereiche aufgeführt .Beachten Sie auch, dass das
(10)
InINT(10)
nicht die "Größe" einer Ganzzahl definiert. Es gibt die Anzeigebreite der Spalte an. Diese Informationen dienen nur zur Beratung.Ändern Sie Ihren Datentyp in, um den Fehler zu beheben
VARCHAR
. Telefon- und Faxnummern sollten als Zeichenfolgen gespeichert werden. Siehe diese Diskussion .quelle
AUTO_INCREMENT
einer Tabelle mit einer kleinen Zeilenanzahl eine große Zahl wurde. Also brauchte ichALTER TABLE table_name AUTO_INCREMENT=103;
(wenn es momentan 102 Zeilen gibt).int
für Telefonnummern, weil ich Benutzereingaben bereinige, indem ich alle Nicht-Nummern entferne.int
für Telefonnummern zu verwenden. Wenn jemand ein internationales Format als 0044 eingeben würde, verlieren Sie 00. Bereinigen Sie die Telefonnummer in Ihrem Code, bevor Sie sie an die Abfrage senden.VARCHAR
es ist dann. Ich entwickle in den USA und die meisten Sachen, die ich mache, sind lokal in meiner Heimatstadt, ABER ich sollte vom ersten Tag an immer noch mit Blick auf die Barrierefreiheit codieren.Sie können den Datentyp auch in bigInt ändern, um Ihr Problem zu lösen. Es wird nicht empfohlen, Ganzzahlen als Zeichenfolgen beizubehalten, sofern dies nicht erforderlich ist. :) :)
ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
quelle
VARCHAR
Sie überschreiten die Länge des Datentyps int . Sie können das Attribut UNSIGNED verwenden , um diesen Wert zu unterstützen.
SIGNED INT unterstützt bis 2147483647 und ermöglicht mit UNSIGNED INT das Doppelte. Danach möchten Sie noch Daten speichern, als CHAR oder VARCHAR mit der Länge 10 zu verwenden
quelle
tl; dr
Stellen Sie sicher, dass Sie
AUTO_INCREMENT
nicht außerhalb der Reichweite sind. Legen Sie in diesem Fall einen neuen Wert fest mit:ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number
Erläuterung
AUTO_INCREMENT
kann eine Zahl enthalten, die größer ist als der vom Datentyp zulässige Maximalwert. Dies kann passieren, wenn Sie einen Tisch gefüllt haben, den Sie später geleert haben, derAUTO_INCREMENT
aber gleich geblieben ist, aber es kann auch verschiedene Gründe geben. In diesem Fall liegt die ID eines neuen Eintrags außerhalb des Bereichs.Lösung
Wenn dies die Ursache Ihres Problems ist, können Sie es beheben, indem Sie einen Wert festlegen
AUTO_INCREMENT
, der größer als die ID der letzten Zeile ist. Wenn die ID Ihrer letzten Zeile 100 lautet, gilt Folgendes:ALTER TABLE table_name AUTO_INCREMENT=101
Wenn Sie den
AUTO_INCREMENT
aktuellen Wert überprüfen möchten , verwenden Sie diesen Befehl :SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'TableName';
quelle
Arbeiten mit:
ALTER TABLE `table` CHANGE `cust_fax` `cust_fax` VARCHAR(60) NULL DEFAULT NULL;
quelle