Mysql
 sql >> Datenbank >  >> RDS >> Mysql

DataColumn MaxLength-Problem mit MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

In dem von Ihnen bereitgestellten Link heißt es eindeutig, dass für TEXT-Felder "Die effektive maximale Länge geringer ist, wenn der Wert Multibyte-Zeichen enthält. "

UTF-8 ist ein Unicode-Zeichensatz und der Standard für Ihre Datenbank. Es verwendet 1-Byte-Darstellungen für die ersten 128 Zeichen, die dem ASCII-Satz entsprechen, und 4-Byte-Darstellungen für die restlichen Zeichen.

Das bedeutet, dass in einer TEXT-Spalte mehr oder weniger Zeichen gespeichert werden können, je nachdem, ob es sich um ASCII-Zeichen handelt oder nicht.

Ihr Problem tritt nun auf, wenn der MySQL-Treiber dies nicht richtig handhabt und davon ausgeht, dass alle UTF-8-Zeichen 4 Bytes breit sind , und dividiert die Spaltenlänge durch die 4 Bytes und übergibt diese als tatsächliche Feldlänge an die DataTable. Das bedeutet, dass es technisch möglich ist, Text in Ihrer Datenbank zu haben, der nicht in die DataTable passt, wie es in Ihrem Fall passiert ist.

Die Lösung (oder Problemumgehung in diesem Fall) für Ihr Problem ist genau das, was Sie jetzt getan haben, nämlich die Spalte in einen Typ zu ändern, der mehr Zeichen enthalten kann, als MEDIUMTEXT oder LONGTEXT.

Meine Vermutung ist, dass diese Entscheidung getroffen wurde, um die Implementierung des MySQL-Treibers zu vereinfachen, aber ich würde versuchen, einen Fehlerbericht an Oracle zu senden.