在MySQL C接口中如何区分TEXT与BLOB字段?
区分MySQL结果集中的TEXT与BLOB类型
当使用mysql_fetch_field_direct获取字段信息时,TEXT和BLOB类型都会被标记为MYSQL_TYPE_BLOB,可以通过以下两个属性区分二者:
- 字符集编号(
charsetnr):TEXT属于字符型字段,会关联有效的字符集编号(值不为0);BLOB是二进制类型,无关联字符集,charsetnr为0。 - 二进制标志位(
BINARY_FLAG):BLOB类型的field->flags会包含BINARY_FLAG;TEXT类型则不会设置该标志。
代码示例
MYSQL_FIELD *field = mysql_fetch_field_direct(resultSet, col); if (field->type == MYSQL_TYPE_BLOB) { // 判断是否为TEXT类型 if (field->charsetnr != 0 && !(field->flags & BINARY_FLAG)) { // 执行TEXT类型的操作逻辑 } else { // 执行BLOB类型的操作逻辑 } }
补充说明
这种判断方式的核心依据是:TEXT本质是带字符集的特殊BLOB,而原生BLOB是纯二进制数据,二者在字符集关联和二进制标志上存在明确差异,通过这两个属性可以准确区分实际类型。
内容的提问来源于stack exchange,提问作者Raven
相关产品推荐
相关产品推荐

