sql >> Base de Datos >  >> RDS >> Mysql

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

En el enlace que proporciona, se establece claramente que para los campos de TEXTO, "La longitud máxima efectiva es menor si el valor contiene caracteres de varios bytes. "

UTF-8 es un conjunto de caracteres Unicode y el predeterminado para su base de datos. Utiliza representaciones de 1 byte para los primeros 128 caracteres, que coinciden con el conjunto ASCII, y representaciones de 4 bytes para el resto de los caracteres.

Esto significa que una columna de TEXTO puede tener más o menos caracteres almacenados dependiendo de si los caracteres son ASCII o no.

Ahora, su problema surge cuando el controlador MySQL no maneja esto correctamente y supondrá que todos los caracteres UTF-8 tienen 4 bytes de ancho , y dividirá la Longitud de columna por los 4 bytes y la pasará a DataTable como la Longitud de campo real. Esto significa que es técnicamente posible tener algún texto en su base de datos que no quepa en el DataTable, como sucedió en su caso.

La solución (o alternativa en este caso) a su problema es exactamente lo que ha hecho hasta ahora, que es cambiar la columna a un tipo que pueda contener más caracteres, como MEDIUMTEXT o LONGTEXT.

Supongo que esta decisión se tomó para simplificar la implementación del controlador MySQL, pero consideraría enviar un informe de errores a Oracle.