Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème DataColumn MaxLength avec MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

Dans le lien que vous fournissez, il est clairement indiqué que pour les champs TEXTE, "La longueur maximale effective est inférieure si la valeur contient des caractères multi-octets. "

UTF-8 est un jeu de caractères Unicode et la valeur par défaut pour votre base de données. Il utilise des représentations sur 1 octet pour les 128 premiers caractères, qui correspondent à l'ensemble ASCII, et des représentations sur 4 octets pour le reste des caractères.

Cela signifie qu'une colonne TEXT peut avoir plus ou moins de caractères stockés selon que les caractères sont ASCII ou non.

Maintenant, votre problème survient lorsque le pilote MySQL ne gère pas cela correctement et supposera que tous les caractères UTF-8 ont une largeur de 4 octets , et divisera la longueur de colonne par les 4 octets et la transmettra au DataTable en tant que longueur de champ réelle. Cela signifie qu'il est techniquement possible d'avoir du texte dans votre base de données qui ne rentre pas dans le DataTable, comme cela s'est produit dans votre cas.

La solution (ou la solution de contournement dans ce cas) à votre problème est exactement ce que vous avez fait pour l'instant, c'est-à-dire changer la colonne en un type pouvant contenir plus de caractères, comme MEDIUMTEXT ou LONGTEXT.

Je suppose que cette décision a été prise pour simplifier la mise en œuvre du pilote MySQL, mais j'envisagerais de soumettre un rapport de bogue à Oracle.