Mysql
 sql >> Database >  >> RDS >> Mysql

Problema DataColumn MaxLength con MySql.Data.MySqlClient.MySqlCommand.ExecuteReader

Nel collegamento fornito, si afferma chiaramente che per i campi TESTO, "La lunghezza massima effettiva è inferiore se il valore contiene caratteri multibyte. "

UTF-8 è un set di caratteri Unicode e l'impostazione predefinita per il tuo database. Utilizza rappresentazioni a 1 byte per i primi 128 caratteri, che corrispondono al set ASCII, e rappresentazioni a 4 byte per il resto dei caratteri.

Ciò significa che una colonna TESTO può contenere più o meno caratteri memorizzati a seconda che i caratteri siano ASCII o meno.

Ora, il tuo problema si presenta quando il driver MySQL non lo gestisce correttamente e supporrà che tutti i caratteri UTF-8 siano larghi 4 byte e dividerà la lunghezza della colonna per i 4 byte e la passerà a DataTable come la lunghezza del campo effettiva. Ciò significa che è tecnicamente possibile avere del testo nel tuo database che non rientrerà nella DataTable, come è successo nel tuo caso.

La soluzione (o la soluzione alternativa in questo caso) al tuo problema è esattamente ciò che hai fatto per ora, ovvero cambiare la colonna in un tipo che può contenere più caratteri, come MEDIUMTEXT o LONGTEXT.

La mia ipotesi è che questa decisione sia stata presa per semplificare l'implementazione del driver MySQL, ma cercherei di inviare una segnalazione di bug a Oracle.