本节描述了C API数据结构,而不是用于预处理语句的数据结构。有关后者的信息,请参见第6.2节,“C API准备好的语句数据结构”.
这个结构表示一个数据库连接的处理程序。几乎所有的MySQL函数都使用它。不要试图复制一份
MYSQL
结构。不能保证这样的副本是可用的。这是一行数据的类型安全表示。它目前被实现为一个计数字节字符串的数组。(如果字段值可能包含二进制数据,则不能将它们视为以空字符结束的字符串,因为这些值可能在内部包含空字节。)行通过调用
mysql_fetch_row ()
.这个结构包含元数据:关于字段的信息,例如字段的名称、类型和大小。本节稍后将更详细地描述其成员。你可取得
MYSQL_FIELD
为每个字段调用作用()
反复。字段值不是这个结构的一部分;它们包含在MYSQL_ROW
结构。这是MySQL字段列表中偏移量的类型安全表示。(用
mysql_field_seek ()
.)偏移量是行中从0开始的字段数。用于行数和的类型
mysql_affected_rows ()
,mysql_num_rows ()
,mysql_insert_id ()
.此类型提供一个范围0
来1.84 e19
.一些使用这种类型返回行数的函数将-1作为无符号值返回,以表示错误或异常情况。您可以通过比较返回值来检查-1
(my_ulonglong) 1
(或(my_ulonglong) ~ 0
,两者是等价的)。在某些系统上,试图打印type值
my_ulonglong
不工作。要打印这样的值,请将其转换为无符号长
和使用陆%
打印格式。例子:printf("行数:%lu\n", (unsigned long) mysql_num_rows(result));
一种布尔类型,值为真(非零)或假(零)。
的MYSQL_FIELD
结构包含以下列表中描述的成员。这些定义主要适用于结果集的列,例如由选择
语句。MYSQL_FIELD
结构还用于提供元数据出
和INOUT
从使用准备好的存储过程执行的存储过程返回的参数调用
语句。对于这些参数,一些结构成员的含义与列值的含义不同。
交互式地查看MYSQL_FIELD
的成员值,调用mysql命令——column-type-info
选项并执行一些示例查询。
char *的名字
字段的名称,以null结尾的字符串。如果该字段的别名为
作为
条款的价值的名字
是别名。对于过程参数,请使用参数名称。char * org_name
字段的名称,以null结尾的字符串。别名是忽略。对于表达式,值是一个空字符串。对于过程参数,请使用参数名称。
char *表
包含此字段的表的名称(如果它不是计算字段)。对于计算字段,则
表格
Value为空字符串。如果从视图中选择了列,表格
视图名称。如果给表或视图一个别名,则作为
条款的价值表格
是别名。对于一个联盟
,值为空字符串。对于过程参数,请使用过程名称。char * org_table
表的名称,以空结尾的字符串。别名是忽略。如果从视图中选择了列,
org_table
视图名称。如果该列是从派生表中选择的,org_table
命名基表。如果派生表包装了视图,org_table
仍然命名基表。如果列是一个表达式,org_table
是空字符串。对于一个联盟
,值为空字符串。对于过程参数,该值是过程名称。char * db
字段所来自的数据库的名称,以null结尾的字符串。如果是计算字段,
db
是一个空字符串。对于一个联盟
,值为空字符串。对于过程参数,为包含该过程的数据库的名称。char *目录
目录的名字。这个值总是
“def”
.char * def
此字段的默认值,作为一个以空字符结尾的字符串。仅当您使用
mysql_list_fields ()
.无符号长长度
字段的宽度。这对应于以字节为单位的显示长度。
服务器决定
长度
值在生成结果集之前,因此这是能够保存结果列中可能的最大值的数据类型所需的最小长度,而不需要预先知道查询将为结果集生成的实际值。对于字符串列,
长度
值因连接字符集的不同而不同。例如,如果字符集是latin1
,一个单字节字符集长度
值选择“abc”
查询是3。如果字符集是utf8mb4
的多字节字符集,其中的字符最多占用4个字节长度
值是12。无符号长max_length
结果集中字段的最大宽度(结果集中实际行中最长字段值的字节长度)。如果你使用
mysql_store_result ()
或mysql_list_fields ()
,它包含字段的最大长度。如果你使用mysql_use_result ()
,则该变量的值为0。的价值
max_length
是结果集中值的字符串表示形式的长度。例如,如果检索浮动
列和”宽的”值是-12.345
,max_length
的长度是7吗“-12.345”
).如果你用的是预处理语句,
max_length
默认情况下没有设置,因为对于二进制协议,值的长度取决于结果集中值的类型。(见第6.2节,“C API准备好的语句数据结构”.)如果你想要max_length
值,启用STMT_ATTR_UPDATE_MAX_LENGTH
选项mysql_stmt_attr_set ()
当你调用时,长度会被设置mysql_stmt_store_result ()
.(见, 6.4.3节提供“mysql_stmt_attr_set()”,部分6.4.28”mysql_stmt_store_result ().)unsigned int name_length
的长度
的名字
.unsigned int org_name_length
的长度
org_name
.unsigned int table_length
的长度
表格
.unsigned int org_table_length
的长度
org_table
.unsigned int db_length
的长度
db
.unsigned int catalog_length
的长度
目录
.unsigned int def_length
的长度
def
.unsigned int旗帜
描述字段的位标志。的
旗帜
值可以有0个或多个在下表中显示的位集。标志值 国旗的描述 NOT_NULL_FLAG
字段不能 零
PRI_KEY_FLAG
字段是主键的一部分 UNIQUE_KEY_FLAG
字段是唯一键的一部分 MULTIPLE_KEY_FLAG
字段是非唯一键的一部分 UNSIGNED_FLAG
领域有 无符号
属性ZEROFILL_FLAG
领域有 补零
属性BINARY_FLAG
领域有 二进制
属性AUTO_INCREMENT_FLAG
领域有 AUTO_INCREMENT
属性ENUM_FLAG
字段是一个 枚举
SET_FLAG
字段是一个 集
BLOB_FLAG
字段是一个 团
或文本
(弃用)TIMESTAMP_FLAG
字段是一个 时间戳
(弃用)NUM_FLAG
字段是数字;见下表的附加说明 NO_DEFAULT_VALUE_FLAG
字段没有默认值;见下表的附加说明 其中一些标志指示数据类型信息,并被替换或与
MYSQL_TYPE_
的价值xxx
字段- >类型
成员描述后:NUM_FLAG
表示列为数字。这包括类型为的列MYSQL_TYPE_DECIMAL
,MYSQL_TYPE_NEWDECIMAL
,MYSQL_TYPE_TINY
,MYSQL_TYPE_SHORT
,MYSQL_TYPE_LONG
,MYSQL_TYPE_FLOAT
,MYSQL_TYPE_DOUBLE
,MYSQL_TYPE_NULL
,MYSQL_TYPE_LONGLONG
,MYSQL_TYPE_INT24
,MYSQL_TYPE_YEAR
.NO_DEFAULT_VALUE_FLAG
表示列没有默认的
条款的定义。这并不适用于零
列(因为此类列的默认值为零
),或AUTO_INCREMENT
列(具有隐含的默认值)。的典型用法
旗帜
值:if (field->flags & NOT_NULL_FLAG) printf(" field不能为空\n"); / /返回null
控件的布尔状态可以使用下表中显示的方便宏来确定
旗帜
价值。unsigned int小数
数字字段的小数数和时态字段的秒分数精度。
unsigned int charsetnr
标识字段的字符集/排序对的ID号。
的指示的字符集通常转换为结果集中的字符值
character_set_results
系统变量。在这种情况下,charsetnr
对应于该变量所指示的字符集。可以通过设置来抑制字符集转换character_set_results
来零
.在这种情况下,charsetnr
该表原始列或表达式的字符集。另请参阅连接字符集和排序规则.若要区分字符串数据类型的二进制和非二进制数据,请检查
charsetnr
值是63。如果是,则字符集为二进制
,表示二进制数据而不是非二进制数据。这使你能够区分二进制
从字符
,VARBINARY
从VARCHAR
,团
类型的文本
类型。charsetnr
中显示的值相同Id
列的显示排序
声明或ID
列的INFORMATION_SCHEMA
整理
表格您可以使用这些信息源查看特定于哪些字符集和排序规则charsetnr
值指示:mysql>显示排序表Id = 63;+-----------+---------+----+---------+----------+---------+ | 排序|字符集|默认Id | | |编译Sortlen | +-----------+---------+----+---------+----------+---------+ | 二进制的二进制| 63 | |是|是| 1 | +-----------+---------+----+---------+----------+---------+ mysql >选择COLLATION_NAME,从INFORMATION_SCHEMA CHARACTER_SET_NAME。id = 33的排序规则;+-----------------+--------------------+ | COLLATION_NAME | CHARACTER_SET_NAME | +-----------------+--------------------+ | utf8_general_ci | utf8 | +-----------------+--------------------+
enum enum_field_types类型
字段的类型。的
类型
价值可能是其中之一MYSQL_TYPE_
符号如下表所示。类型值 类型描述 MYSQL_TYPE_TINY
非常小的整数
场MYSQL_TYPE_SHORT
短整型
场MYSQL_TYPE_LONG
整数
场MYSQL_TYPE_INT24
MEDIUMINT
场MYSQL_TYPE_LONGLONG
长整型数字
场MYSQL_TYPE_DECIMAL
小数
或数字
场MYSQL_TYPE_NEWDECIMAL
精密的数学 小数
或数字
MYSQL_TYPE_FLOAT
浮动
场MYSQL_TYPE_DOUBLE
双
或真正的
场MYSQL_TYPE_BIT
位
场MYSQL_TYPE_TIMESTAMP
时间戳
场MYSQL_TYPE_DATE
日期
场MYSQL_TYPE_TIME
时间
场MYSQL_TYPE_DATETIME
DATETIME
场MYSQL_TYPE_YEAR
一年
场MYSQL_TYPE_STRING
字符
或二进制
场MYSQL_TYPE_VAR_STRING
VARCHAR
或VARBINARY
场MYSQL_TYPE_BLOB
团
或文本
字段(使用max_length
以确定最大长度)MYSQL_TYPE_SET
集
场MYSQL_TYPE_ENUM
枚举
场MYSQL_TYPE_GEOMETRY
空间领域 MYSQL_TYPE_NULL
零
类型字段的
MYSQL_TYPE_TIME2
,MYSQL_TYPE_DATETIME2
,MYSQL_TYPE_TIMESTAMP2
)类型代码只在服务器端使用。客户看到MYSQL_TYPE_TIME
,MYSQL_TYPE_DATETIME
,MYSQL_TYPE_TIMESTAMP
代码。你可以使用
IS_NUM ()
宏来测试字段是否具有数值类型。通过类型
价值IS_NUM ()
如果字段是数值,它的计算结果为TRUE:if (IS_NUM(field->type)) printf(" field is numeric\n"); / /字段是数字的
枚举
和集
值以字符串的形式返回。对于这些,检查一下类型
值是MYSQL_TYPE_STRING
而ENUM_FLAG
或SET_FLAG
中设置的旗帜
价值。