Ich habe ein MySQL-Skript geschrieben, um eine Datenbank für hypothetische Krankenhausunterlagen zu erstellen und diese mit Daten zu füllen. Eine der Tabellen, Abteilung, enthält eine Spalte mit dem Namen Beschreibung, die als Typ varchar (200) deklariert ist. Beim Ausführen des INSERT-Befehls für Beschreibung wird folgende Fehlermeldung angezeigt:
Fehler 1406: Daten zu lang für Spalte 'Beschreibung' in Zeile 1.
Alle Zeichenfolgen, die ich einfüge, bestehen aus weniger als 150 Zeichen.
Hier ist die Erklärung:
CREATE TABLE Department(
...
Description varchar(200)
...);
Und hier ist der Einfügebefehl:
INSERT INTO Department VALUES
(..., 'There is some text here',...), (..., 'There is some more text over here',...);
Dies sollte anscheinend funktionieren. Hat jemand einen Einblick?
Antworten:
Ändern Sie den Spaltentyp in
LONGTEXT
quelle
Ich hatte ein ähnliches Problem beim Migrieren einer alten Datenbank auf eine neue Version.
Schalten Sie den MySQL-Modus um, um STRICT nicht zu verwenden.
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Fehlercode: 1406. Daten zu lang für Spalte - MySQL
quelle
Es gibt eine feste Grenze dafür, wie viele Daten in einer einzelnen Zeile einer MySQL-Tabelle gespeichert werden können, unabhängig von der Anzahl der Spalten oder der Länge der einzelnen Spalten.
Wie in der AMTLICHEN DOKUMENTATION angegeben
Hier finden Sie INNODB TABLES LIMITATIONS
quelle
Varchar hat seine eigenen Grenzen. Versuchen Sie vielleicht, den Datentyp in Text zu ändern.!
quelle
Es stellte sich heraus, wie es oft der Fall ist, dass es ein dummer Fehler von meiner Seite war. So wie ich dies getestet habe, habe ich die Abteilungstabelle nicht neu erstellt, nachdem ich den Datentyp von varchar (50) in varchar (200) geändert hatte. Ich habe gerade den Einfügebefehl erneut ausgeführt, immer noch mit der Spalte als varchar (50).
quelle
in mysql, wenn Sie nehmen,
VARCHAR
dann ändern Sie es inTEXT
bcoz seine Größe ist 65.535 und wenn SieTEXT
die Änderung bereits mit nehmen können, wenn SieLONGTEXT
dann mehr brauchen65,535
.Gesamtgröße
LONGTEXT
ist4,294,967,295
Zeichenquelle
Mit Hibernate können Sie Ihren eigenen UserType erstellen. Das habe ich für dieses Problem getan. So etwas Einfaches:
Es gibt natürlich mehr zu implementieren, wenn Sie Ihren eigenen UserType erweitern, aber ich wollte das nur für alle herausbringen, die nach anderen Methoden suchen.
quelle
Sehr alte Frage, aber ich habe alles versucht, was oben vorgeschlagen wurde, und konnte es immer noch nicht lösen.
Es stellte sich heraus, dass ich nach dem Einfügen / Aktualisieren einen Auslöser für die Haupttabelle hatte, der die Änderungen durch Einfügen des Datensatzes in eine Verlaufstabelle mit ähnlicher Struktur verfolgte. Ich habe die Größe in der Haupttabellenspalte erhöht, aber vergessen, die Größe der Verlaufstabellenspalte zu ändern, und das hat das Problem verursacht.
Ich habe ähnliche Änderungen in der anderen Tabelle vorgenommen und der Fehler ist verschwunden.
quelle
simple_history
dieses Django-Modell habe.Ich versuche, eine Tabelle mit einem Feld mit 200 Zeichen zu erstellen, und ich habe zwei Zeilen mit frühen 160 Zeichen hinzugefügt, und es ist in Ordnung. Sind Sie sicher, dass Ihre Zeilen weniger als 200 Zeichen enthalten?
Zeige SqlFiddle
quelle
Wenn Ihre Quelldaten größer als Ihr Zielfeld sind und Sie nur zusätzliche Zeichen abschneiden möchten, aber den strengen Modus nicht deaktivieren oder die Größe des Zielfelds ändern möchten, reduzieren Sie die Daten einfach auf die gewünschte Größe mit
LEFT(field_name,size)
.INSERT INTO Department VALUES (..., LEFT('There is some text here',30),...), (..., LEFT('There is some more text over here',30),...);
Ich habe "30" als Beispiel für die Größe Ihres Zielfelds verwendet.
In einigen meiner Codes ist es einfach, die Größe des Zielfelds zu ermitteln und dies zu tun. Aber wenn Ihr Code das schwierig macht, dann gehen Sie mit einer der anderen Antworten.
quelle
In meinem Fall trat dieser Fehler auf, weil Daten einen falschen Typ eingegeben haben, zum Beispiel: Wenn es sich um eine lange Typspalte handelt, habe ich versucht, einen Zeichenfolgentyp einzugeben. Überprüfen Sie daher bitte, ob Ihre eingegebenen Daten und Ihre Daten identisch sind oder nicht
quelle
Für mich habe ich den Spaltentyp als BIT definiert (zB "boolean")
Als ich versuchte, den Spaltenwert "1" über die Benutzeroberfläche (Workbench) festzulegen, wurde der Fehler "Daten zu lang für Spalte" angezeigt.
Es stellt sich heraus, dass es eine spezielle Syntax zum Festlegen von BIT-Werten gibt:
quelle