Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

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


No link que você fornece, ele afirma claramente que, para campos TEXT, "O comprimento máximo efetivo é menor se o valor contiver caracteres multibyte. "

UTF-8 é um conjunto de caracteres Unicode e o padrão para seu banco de dados. Ele usa representações de 1 byte para os primeiros 128 caracteres, que correspondem ao conjunto ASCII, e representações de 4 bytes para o restante dos caracteres.

Isso significa que uma coluna TEXT pode ter mais ou menos caracteres armazenados dependendo se os caracteres são ASCII ou não.

Agora, seu problema ocorre quando o driver MySQL não lida com isso corretamente e presumirá que todos os caracteres UTF-8 têm 4 bytes de largura , e dividirá o Comprimento da Coluna pelos 4 bytes e passará isso para a DataTable como o Comprimento do Campo real. Isso significa que é tecnicamente possível ter algum texto em seu banco de dados que não caiba na DataTable, como aconteceu no seu caso.

A solução (ou solução alternativa neste caso) para o seu problema é exatamente o que você fez por enquanto, que é alterar a coluna para um tipo que possa conter mais caracteres, como MEDIUMTEXT ou LONGTEXT.

Meu palpite é que essa decisão foi tomada para simplificar a implementação do MySQL Driver, mas eu gostaria de enviar um relatório de bug para a Oracle.