MySQL C API 处理文本字段

Maj*_*cRa 5 c mysql mysql-connector

当使用 MySQL C API 中的 Prepared Statements 来处理 TEXT 字段结果时,必须为 out 绑定指定字符串的长度:

 MYSQL_BIND    out_bind;
 char          str_data[STRING_SIZE]; 
 my_bool       is_null;
 my_bool       error;

 ....
 /* STRING COLUMN */
 out_bind.buffer_type = MYSQL_TYPE_STRING;
 out_bind.buffer = str_data;
 out_bind.buffer_length = STRING_SIZE;
 out_bind.is_null= &is_null;
 out_bind.length= &length;
 out_bind.error= &error;

 mysql_stmt_bind_result(statement, out_bind)
Run Code Online (Sandbox Code Playgroud)

在给定的示例中,STRING_SIZE 是已知常量,但如何处理数据长度从小到兆大小不等的 TEXT 字段?

有没有标准的方法呢?

pmg*_*pmg 4

手册mysql_stmt_fetch说:

在某些情况下,您可能希望在使用 mysql_stmt_fetch() 获取列值之前确定列值的长度。...为了实现这一点,您可以使用以下策略:

  • 在调用mysql_stmt_fetch()检索各个行之前,传递STMT_ATTR_UPDATE_MAX_LENGTHmysql_stmt_attr_set(),然后调用mysql_stmt_store_result()以在客户端缓冲整个结果。设置该STMT_ATTR_UPDATE_MAX_LENGTH属性会导致列值的最大长度由max_length返回的结果集元数据的成员指示mysql_stmt_result_metadata()

  • 使用mysql_stmt_fetch()相关列的零长度缓冲区和可以存储实际长度的指针进行调用。然后使用实际长度mysql_stmt_fetch_column()

您可能还想阅读手册页mysql_stmt_bind_result