De Données MySQL Erreur De Troncation
Je travaille avec un assez simple base de données, à partir d'une application Java. Nous essayons d'insérer à propos de 200k de texte à la fois, en utilisant le standard de mysql JDBC adaptateur. Nous avons par intermittence obtenir un com.mysql.jdbc.MysqlDataTruncation: la troncature des Données: les Données trop long pour la colonne d'erreur.
Le type de colonne est longtext, et le classement de base de données est UTF-8. L'erreur s'affiche à l'aide de deux MyISAM et InnoDB table des moteurs. Max taille de paquet a été mis en ot de 1 GO sur les deux côtés client et serveur, de sorte que ne devrait pas être à l'origine d'un problème, soit.
OriginalL'auteur | 2008-09-16
Vous devez vous connecter pour publier un commentaire.
Vérifier que vos données UTF-8 est tous les 3 octets Unicode. Si vous avez 4 octets (juridique en Unicode et Java, illégale dans MySQL 5), il peut lancer cette erreur lorsque vous essayez d'insérer. C'est un problème qui devrait être résolu dans MySQL 6.0.
Bonne question, qui devrait probablement être demandé séparément. Il existe différentes façons. Sur le dessus de ma tête, d'une façon qui pourrait fonctionner en Java est de vérifier s'il y a des points de code dans la chaîne de caractères qui sont représentés par plus d'un Caractère, comme ceci:
s.length() == s.toCharArray().length
. Si cela est vrai,s
a le même nombre de points de code et les personnages, si vous n'avez seulement BMP personnages qui sont représentés dans l'UTF-8 par jusqu'à 3 octets.OriginalL'auteur Avi
Eh bien, vous pouvez faire ignorer l'erreur en faisant un INSERT IGNORE qui sera juste tronquer les données et insérez-la de toute façon. (à partir de http://dev.mysql.com/doc/refman/5.0/en/insert.html )
OriginalL'auteur Nicholas
Dans mysql, vous pouvez utiliser
MEDIUMTEXT
ouLONGTEXT
type de champ de texte de grande taille de donnéesOriginalL'auteur grigson
Il me semble que vous essayez de mettre trop d'octets dans une colonne. J'ai couru à travers un très semblables erreurs avec MySQL la nuit dernière en raison d'un bug dans mon code. Je voulais faire
mais avait effectivement tapé
Où foo.l'état est censé être un code à deux caractères pour un État AMÉRICAIN ( varchar(2) ). J'ai eu la même erreur que vous. Vous pourriez aller chercher une situation similaire dans votre code.
OriginalL'auteur afarnham
Je viens de toucher ce problème et l'a résolu en supprimant tous les caractères ascii dans mon texte (à la suite de l'UTF-8 conseils ci-dessus).
J'ai eu le problème sur une Debian 4, Java 5 système; mais le même code a bien fonctionné avec Ubuntu 9.04, Java 6. Exécuter MySql 5.
OriginalL'auteur Szemere