MySQL-Daten Truncation-Fehler
Ich arbeite mit einem relativ einfachen Datenbank, aus einer Java-Anwendung. Wir versuchen, legen Sie über 200k von text zu einer Zeit, über die standard-JDBC-mysql-adapter. Wir zeitweise Holen Sie sich ein com.mysql.jdbc.MysqlDataTruncation: zum abschneiden von Daten: Daten, die zu lang für die Spalte Fehler.
Der Spalte Typ longtext-und Datenbank-collation UTF-8. Der Fehler zeigt sich über beide MyISAM-und InnoDB-Tabellen-engines. Max Paketgröße festgelegt wurde ot 1 GB auf client und server-Seiten, so dass sollte nicht das problem verursacht, entweder.
InformationsquelleAutor | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie, dass Ihre UTF-8-Daten alle 3-byte-Unicode. Wenn du 4-byte-Zeichen (legal in Unicode-und Java-illegal in MySQL 5), kann diesen Fehler auslösen, wenn Sie versuchen, einfügen. Dies ist ein Problem, das behoben werden sollte in MySQL 6.0.
Gute Frage, das sollte wohl GESONDERT erfragt werden. Es gibt verschiedene Möglichkeiten. Aus der Spitze von meinem Kopf, eine Möglichkeit, die funktionieren könnte in Java ist zu prüfen, ob es irgendwelche code-Punkte, die in der Zeichenfolge, sind vertreten durch mehr als ein Zeichen, wie diese:
s.length() == s.toCharArray().length
. Wenn das wahr ist,s
hat die gleiche Anzahl der Codepunkte und Zeichen, so werden nur BMP-Zeichen, die dargestellt werden, in UTF-8 um bis zu 3 bytes.InformationsquelleAutor Avi
Gut du es machen kannst, den Fehler ignorieren, indem Sie eine INSERT IGNORE, nur kürzen Sie die Daten und fügen Sie es sowieso. (aus http://dev.mysql.com/doc/refman/5.0/en/insert.html )
InformationsquelleAutor Nicholas
In mysql können Sie
MEDIUMTEXT
oderLONGTEXT
Feld-Typ für großen text DatenInformationsquelleAutor grigson
Es klingt für mich wie Sie versuchen, zu viele bytes in einer Spalte. Ich lief über eine sehr ähnliche Fehlermeldung mit MySQL Letzte Nacht wegen einem Fehler in meinem code. Ich meinte zu tun
hatte aber eigentlich eingegeben
Wo foo.Staat soll ein zwei-Zeichen-code für einen US-Bundesstaat ( varchar(2) ). Ich habe den gleichen Fehler wie du. Sie könnte gehen, schauen Sie für eine ähnliche situation in Ihrem code.
InformationsquelleAutor afarnham
Ich einfach auf dieses problem und löste es, indem Sie alle nicht-standard-ascii-Zeichen in meinem text (nach der UTF-8 Hinweis oben).
Hatte ich das problem auf einem Debian 4, Java-5-system; aber der gleiche code funktionierte mit Ubuntu 9.04, Java 6. Beide laufen MySql 5.
InformationsquelleAutor Szemere