10bet网址
MySQL 8.0 C API开发人员指南
下载本手册
PDF(美国LTR)- 1.3 mb
PDF (A4)- 1.3 mb
HTML下载(TGZ)- 165.5KB.
HTML下载(ZIP)- 175.9 kb


5.2 C API基本数据结构

本节介绍除预处理语句、异步接口和复制流接口外的C API数据结构。有关这些的信息,请参阅第6.2节,“C API准备好的语句数据结构”第7.2节,“C API异步接口数据结构”,第10.2节“C API二进制日志数据结构”

  • mysql.

    这个结构表示一个数据库连接的处理程序。它用于几乎所有MySQL函数。不要试图复制一个mysql.结构体。无法保证这样的副本将是可用的。

  • mysql_res.

    此结构表示返回行的查询的结果(选择显示描述解释)。从查询返回的信息称为结果集在本节的其余部分中。

  • MYSQL_ROW

    这是一行数据的类型安全表示。它目前作为计数的字节字符串的数组实现。(如果字段值可能包含二进制数据,则无法将这些视为空终止字符串,因为此类值可能包含NULL字节内部。)通过呼叫获得行mysql_fetch_row()

  • MYSQL_FIELD

    此结构包含元数据:有关字段的信息,例如字段的名称,类型和大小。在本节后面将更详细地描述其成员。你可以获得MYSQL_FIELD通过致电的每个字段的结构作用()反复。字段值不是该结构的一部分;它们包含在一个MYSQL_ROW结构体。

  • mysql_field_offset.

    这是MySQL字段列表中偏移量的类型安全表示。(用mysql_field_seek())。偏移量是一行中的字段数,从零开始。

  • my_ulonglong

    用于64位无符号整数的类型。这my_ulonglongtype在MySQL 8.0.18之前使用。从MySQL 8.0.18开始,使用uint64_tC类型。

  • my_bool.

    一个布尔类型,对于真实的值(非零)或假(零)。这my_bool.type在MySQL 8.0之前使用。从MySQL 8.0开始,使用保龄球intC类型。

    笔记

    的变化my_bool.保龄球意味着mysql.h.头文件需要c++或C99编译器来编译。

MYSQL_FIELD结构包含以下列表中描述的成员。该定义主要适用于结果集的列,例如由此产生的列选择语句。MYSQL_FIELD结构还用于提供元数据INOUT从使用准备的存储过程返回的参数调用语句。对于这样的参数,一些结构成员的含义与列值的含义不同。

小费

以交互方式查看MYSQL_FIELD结果集的成员值mysql命令——column-type-info选项并执行一些示例查询。

  • 字符*名称

    字段的名称,以空结束的字符串。如果字段的别名是作为条款,价值的名字是别名。对于过程参数,参数名称。

  • char * org_name

    字段的名称,以空结束的字符串。别名是忽略。对于表达式,值是一个空字符串。对于过程参数,参数名称。

  • char *表

    包含此字段的表的名称(如果不是计算字段)。对于计算字段,则表格值是空字符串。如果从视图中选择列,则表格视图名称。如果为表或视图提供了带有作为条款,价值表格是别名。为一个联盟,值为空字符串。对于过程参数,为过程名称。

  • char * org_table

    表的名称,作为一个以空结束的字符串。别名是忽略。如果从视图中选择列,则org_table视图名称。如果从派生表中选择列,则org_table命名基表。如果派生表封装了视图,org_table仍然命名基表。如果列是一个表达式,org_table是空字符串。为一个联盟,值为空字符串。对于过程参数,该值为过程名称。

  • char * db

    该字段来自的数据库的名称,以空结束的字符串形式。如果这个字段是一个计算字段,D b是一个空字符串。为一个联盟,值为空字符串。对于过程参数,为包含该过程的数据库的名称。

  • char *目录

    目录的名字。这个值总是“def”

  • char * def

    此字段的默认值,作为空终止字符串。只有在使用时才设置mysql_list_fields()

  • 无符号长长度

    场的宽度。这对应于显示长度,以字节为单位。

    服务器确定长度在它生成结果集之前的值,因此这是能够从结果列中保存最大可能值的数据类型所需的最小长度,而不提前知道结果集的查询生成的实际值。

    对于字符串列,则长度值在连接字符集上变化。例如,如果字符集是拉丁语,一个单字节字符集长度A.价值选择'abc'查询是3。如果字符集为UTF8MB4.,一个多字节字符集,其中字符最多需要4个字节,长度值是12。

  • 无符号长max_length

    结果集中字段的最大宽度(以字节为单位的结果集中实际行的最长字段值的长度)。如果你使用mysql_store_result()mysql_list_fields(),这包含字段的最大长度。如果你使用mysql_use_result(),此变量的值为零。

    的价值最长长度是结果集中值的字符串表示形式的长度。例如,如果您检索浮动列和宽的值是-12.345最长长度的长度是“-12.345”)。

    如果你在使用准备好的语句,最长长度默认情况下未设置,因为对于二进制协议,值的长度取决于结果集中的值的类型。(看第6.2节,“C API准备好的语句数据结构”)。如果你想最长长度值,启用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

    长度表格

  • 无符号int org_table_length.

    长度org_table

  • unsigned int db_length

    长度D b

  • unsigned int catalog_length.

    长度目录

  • unsigned int def_length

    长度def

  • unsigned int旗帜

    描述字段的位标志。这旗帜值可能有下表中显示的零位或多个位集。

    标志值 旗帜描述
    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的价值字段 - >类型成员描述后:

    • 检查时间戳值,检查是否类型mysql_type_blob.MYSQL_TYPE_TIMESTAMP.(BLOB_FLAGTIMESTAMP_FLAG旗帜不需要。)

    • 枚举值作为字符串返回。对于这些,检查类型值是MYSQL_TYPE_STRINGENUM_FLAGSET_FLAG中设置的旗帜价值。

    NUM_FLAG表示列是数字。这包括具有类型的列MYSQL_TYPE_DECIMALMYSQL_TYPE_NEWDECIMALMYSQL_TYPE_TINYMYSQL_TYPE_SHORTMYSQL_TYPE_LONGmysql_type_float.MYSQL_TYPE_DOUBLEMYSQL_TYPE_NULLMYSQL_TYPE_LONGLONGmysql_type_int24.,mysql_type_year

    NO_DEFAULT_VALUE_FLAG指示列没有默认条款的定义。这不适用于列(因为这类列的默认值是),或AUTO_INCREMENT列(具有隐含的默认值)。

    以下示例说明了典型的使用旗帜值:

    if(field->标志&not_null_flag)printf(“字段不能为null \ n”);

    属性的布尔状态,可以使用下表所示的便利宏来确定旗帜价值。

    旗帜的地位 描述
    IS_NOT_NULL(旗帜) 如果该字段被定义为没有空
    IS_PRI_KEY(旗帜) 如果该字段是主键,则为True
    IS_BLOB(旗帜) 如果该字段为文本(弃用;测试字段 - >类型反而)
  • unsigned int小数

    数字字段的小数数,以及时间字段的小数秒精度。

  • unsigned int charsetnr.

    指示字段的字符集/排序规则对的ID号。

    通常,结果集中的字符值被转换为所示的字符集character_set_results.系统变量。在这种情况下,charsetnr对应于该变量指示的字符集。字符集转换可以通过设置来抑制character_set_results..在这种情况下,charsetnr对应于原始表列或表达式的字符集。也可以看看连接字符集和排序

    要区分字符串数据类型的二进制和非inary数据,请检查是否charsetnr值为63.如果是,则字符集是二进制,它表示二进制而不是非inary数据。这使您能够区分二进制字符varbinary.VARCHAR,类型的文本类型。

    charsetnr类中显示的值相同Id列的显示排序声明或ID列的INFORMATION_SCHEMA整理桌子。您可以使用这些信息来源来查看特定的字符集和归类charsetnr值表示:

    mysql> SHOW COLLATION WHERE 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 Tinyint.
    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. VARCHARvarbinary.
    mysql_type_blob. 文本场(使用最长长度确定最大长度)
    MYSQL_TYPE_SET
    MYSQL_TYPE_ENUM 枚举
    MYSQL_TYPE_GEOMETRY 空间领域
    MYSQL_TYPE_NULL 类型字段

    mysql_type_time2.MYSQL_TYPE_DATETIME2,mysql_type_timestamp2.)类型代码只在服务器端使用。客户看到MYSQL_TYPE_TIMEmysql_type_datetime.,MYSQL_TYPE_TIMESTAMP代码。

    你可以使用IS_NUM ()宏来测试字段是否为数字类型。通过类型价值IS_NUM ()如果字段是数值,则计算为TRUE:

    如果IS_NUM(字段->类型))printf(“字段是数字\n”);

    枚举值作为字符串返回。对于这些,检查类型值是MYSQL_TYPE_STRINGENUM_FLAGSET_FLAG中设置的旗帜价值。