我使用mysql_fetch_field_direct来获取有关动态获取的结果集中给定列的类型的信息,如下所示:

MYSQL_FIELD *field = mysql_fetch_field_direct(resultSet, col);

然后我访问field->type以判断该字段的类型.然而,我现在被困住了,因为我想根据字段的类型是BLOB还是TEXT采取不同的操作.然而,enum_field_types枚举似乎只包含MYSQL_TYPE_BLOB,而不是MYSQL_TYPE_TEXT,而且还将文本标记为BLOB.这在某种程度上是有意义的,因为TEXT对象本质上是BLOB,但在处理数据时有特殊的解释.

然而,这让我想知道:如何判断字段的实际类型是BLOB还是TEXT

推荐答案

判断一下field->charsetnr号.

如果此值为63,则为二进制BLOB.

如果它是任何其他值,它就是文本.

以下是documentation位(在描述charsetnr一节中)对此的看法:

要区分字符串数据类型的二进制和非二进制数据,请判断charsetnr值是否为63.如果是,则字符集是二进制的,这表示二进制数据而不是非二进制数据.这使您能够区分BINARY FOR CHAR、VARBINARY FOR VARCHAR以及BLOB类型和TEXT类型.

C++相关问答推荐

Zig将std.os.argv转换为C类型argv

错误:在.h程序中重新定义 struct

核心转储文件中出现奇怪的大小变化

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

如何在c++中包装返回空*的函数

为什么该函数不将参数值保存到数据 struct 中?

C在声明带有值的数组时,声明大小有用吗?

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

cairo 剪辑区域是否存在多个矩形?

从C文件中删除注释

C将数组传递给函数以修改数组

如何在c中使用具有不同变量类型的内存分配?

不使用任何预定义的C函数进行逐位运算

用C++高效解析HTTP请求的方法

在下面的C程序中,.Ap0是如何解释的?

C:面筋蛋白';为什么不刷新窗口?

计算时出现奇怪的计算错误;N Select K;在C中

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

STM32:代码的执行似乎取决于它在闪存中的位置

定义 int a = 0, b = a++, c = a++;在 C 中定义了行为吗?