Estoy usando el conector MySQL ODBC 8.19 de 32 bits con el servidor Classic asp MYSQL es 8. CHARACTER es latin1 y COLLATE es latin1_swedish_ci La cadena de conexión tiene OPCIÓN = 3 El motor de almacenamiento es InnoDB
A continuación se muestra la estructura de la tabla.
CREATE TABLE Data_temp ( ROWGUID varchar(36) default (UUID()) NOT NULL , col_desc varchar(10) NOT NULL , History varchar (4000), PRIMARY KEY Data_temp_P_KEY(ROWGUID) ) ;Usando el comando Adodb, ejecute la siguiente consulta
Select * from Data_temp WHERE col_desc=?y el parámetro es proporcionado por el parámetro de creación de adodb.
El resultado se devuelve en el conjunto de registros adodb como
set recordset=command.execute methodel conjunto de registros no se devuelve si la columna Historial tiene datos de más de 1024 caracteres
Si se ejecuta la misma consulta en los siguientes escenarios como ,
Select col_desc,Rowguid from Data_temp WHERE col_desc=?es decir, la lista de columnas no contiene esa columna de datos grande, entonces se devuelve el conjunto de registros
Select col_desc,Rowguid,substring(history,1,1024) from Data_temp WHERE col_desc=?también funciona
Al hacer una columna como tipo de datos TEXTO en lugar de varchar
¿Cuál podría ser la razón?
¿Hay algún límite para devolver los datos de la columna? Una observación más en lugar de usar una consulta parametrizada si la consulta se ejecuta directamente con valor en la consulta misma
Select * from Data_temp WHERE Col_Desc='aa'sin parámetro, se devuelve el conjunto de registros
Gracias por adelantado
Echa un vistazo a estos problemas similares:
https://bugs.mysql.com/bug.php?id=92078
https://bugs.mysql.com/bug.php?id=93895
https://bugs.mysql.com/bug.php?id=94545
y la recomendación oficial:
Fuente: https://dev.mysql.com/doc/relnotes/connector-odbc/en/news-8-0-16.html
Se emitió una excepción al obtener el contenido de un registro BLOB/TEXT después de ejecutar una instrucción preparada en el lado del servidor con un parámetro vinculado.
La solución es no usar parámetros ni especificar NO_SSPS=1 en la cadena de conexión; esto permite que el controlador obtenga los datos.
En Connector/ODBC 5.2 y posteriores, de forma predeterminada, se utilizan declaraciones preparadas del lado del servidor. Cuando esta opción se establece en un valor distinto de cero, las declaraciones preparadas se emulan en el lado del cliente, que es el mismo comportamiento que en 5.1 y 3.51. Añadido en 5.2.0.
La solución alternativa recomendada es especificar NO_SSPS=1 en la cadena de conexión y confirmo que funciona.