10bet网址
MySQL 5.6 C API开发人员指南
下载本手册

5.2 C API基本数据结构

本节介绍除用于准备好语句的CAPI数据结构。有关后者的信息,请参阅第6.2节“C API准备的声明数据结构”

  • mysql.

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

  • mysql_res.

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

  • mysql_row.

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

  • mysql_field.

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

  • mysql_field_offset.

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

  • my_ulonglong

    用于行数和用于的类型mysql_affected_rows()mysql_num_rows(), 和mysql_insert_id()。这种类型提供了一系列0.1.84E19.

    使用此类型返回行计数的一些函数返回-1作为无符号值以指示错误或异常条件。您可以通过比较返回值来检查-1(my_ulonglong)-1(或者(My_ulonglong)〜0,这是等同的)。

    在某些系统上,试图打印类型的值my_ulonglong不起作用。要打印这样的值,将其转换为毫无符号并使用A.%鲁打印格式。例子:

    printf(“行数:%lu \ n”,(unsigned long)mysql_num_rows(结果));
  • my_bool.

    一个布尔类型,对于真实的值(非零)或假(零)。

mysql_field.结构包含以下列表中描述的成员。该定义主要适用于结果集的列,例如由此产生的列选择陈述。mysql_field.结构也用于提供元数据出去进出从使用准备的存储过程返回的参数称呼陈述。对于这样的参数,一些结构成员具有与列值的含义不同的含义。

小费

互动地观看mysql_field.结果集的成员值,调用mysql.司法- column-type-in​​fo选项并执行一些示例查询。

  • 字符*名称

    字段的名称,作为空终止字符串。如果该领域被赋予别名作为条款,价值名称是别名。对于过程参数,参数名称。

  • char * org_name.

    字段的名称,作为空终止字符串。别名被忽略了。对于表达式,该值是空字符串。对于过程参数,参数名称。

  • Char *表

    包含此字段的表的名称,如果它不是计算的字段。对于计算的字段,桌子值是空字符串。如果从视图中选择列,则桌子名称视图。如果表格或视图是给出的别名作为条款,价值桌子是别名。为一个联盟,该值是空字符串。对于过程参数,过程名称。

  • char * org_table

    表的名称,作为空终止的字符串。别名被忽略了。如果从视图中选择列,则org_table名称视图。为一个联盟,该值是空字符串。对于过程参数,过程名称。

  • Char * DB.

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

  • CHAR *目录

    目录名称。这个值始终是“def”

  • char * def.

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

  • 毫无符号长的长度

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

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

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

  • unsigned long max_length.

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

    的价值最长长度是结果集中值的字符串表示的长度。例如,如果您检索a漂浮柱子和柱子最广价值是-12.345.最长长度是7(长度)'-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()”。)

  • 无符号int name_length.

    长度名称

  • unsigned int org_name_length.

    长度org_name.

  • 无符号int table_length.

    长度桌子

  • 无符号int org_table_length.

    长度org_table

  • unsigned int db_length.

    长度D b

  • unsigned int catalog_length.

    长度目录

  • unsigned int def_length.

    长度def

  • 无符号int标志

    描述该字段的位标志。这旗帜值可以具有如下表所示的位集中的零个或多个。

    标志价值 旗帜描述
    not_null_flag. 领域不能是空值
    pri_key_flag. 字段是主要键的一部分
    unique_key_flag. 字段是唯一键的一部分
    multime_key_flag. 字段是诺唯一键的一部分
    unsigned_flag. 领域有无符号属性
    zerofill_flag. 领域有Zerofill.属性
    binary_flag. 领域有二进制属性
    auto_increment_flag. 领域有自动递增属性
    enum_flag. 领域是An.枚举
    set_flag. 领域是A.
    blob_flag. 领域是A.斑点或者文本(弃用)
    时间戳_FLAG. 领域是A.时间戳(弃用)
    num_flag. 字段是数字;请参阅下表的其他注释
    no_default_value_flag. 字段没有默认值;请参阅下表的其他注释

    其中一些标志表示数据类型信息,并与之结合使用或使用mysql_type_XXX.价值在字段 - >类型稍后描述的会员:

    • 检查斑点或者时间戳值,检查是否类型mysql_type_blob.或者mysql_type_timestamp.。(这blob_flag.时间戳_FLAG.旗帜不需要。)

    • 枚举值作为字符串返回。为此,检查那个类型价值是mysql_type_string.那个enum_flag.或者set_flag.标志设置在旗帜价值。

    num_flag.表示列是数字。这包括具有类型的列mysql_type_decimal.mysql_type_newdecimal.mysql_type_tiny.mysql_type_short.mysql_type_longmysql_type_float.mysql_type_double.mysql_type_null.mysql_type_longlongmysql_type_int24., 和mysql_type_year.

    no_default_value_flag.表示列没有默认条款定义。这不适用于空值列(因为这些列具有默认值空值), 或者自动递增列(具有隐含的默认值)。

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

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

    您可以使用下表中显示的便利宏来确定蜂拥而至旗帜价值。

    国旗状态 描述
    is_not_null(标志) 如果此字段定义为true没有空
    is_pri_key(标志) 如果此字段是主键,则为true
    is_blob(标志) 如果这个字段是一个斑点或者文本(弃用;测试字段 - >类型反而)
  • 无符号INT小数

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

  • unsigned int charsetnr.

    一个ID号,指示该字段的字符集/核对对。

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

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

    charsetnr.值与显示的值相同ID栏目展示融合声明或者ID栏目Information_Schema.拼写桌子。您可以使用这些信息来源来查看特定的字符集和归类charsetnr.值表示:

    MySQL>显示ID = 63;+ ----------- + --------- + ---- + --------- + ---------- +  --------- + |整理|charset |ID |默认编译|sortlen |+ ----------- + --------- + ---- + --------- + ---------- +  --------- + |二进制| binary | 63 | Yes | Yes | 1 | +-----------+---------+----+---------+----------+---------+ mysql> SELECT COLLATION_NAME, CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE ID = 33; +-----------------+--------------------+ | COLLATION_NAME | CHARACTER_SET_NAME | +-----------------+--------------------+ | utf8_general_ci | utf8 | +-----------------+--------------------+
  • enum enum_field_types类型

    场的类型。这类型价值可能是其中之一mysql_type_符号显示在下表中。

    类型值 类型描述
    mysql_type_tiny. Tinyint.场地
    mysql_type_short. small场地
    mysql_type_long 整数场地
    mysql_type_int24. 媒体场地
    mysql_type_longlong big场地
    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. 约会时间场地
    mysql_type_year. 场地
    mysql_type_string. char或者二进制场地
    mysql_type_var_string. varchar.或者varbinary.场地
    mysql_type_blob. 斑点或者文本场(使用最长长度确定最大长度)
    mysql_type_set. 场地
    mysql_type_enum. 枚举场地
    mysql_type_geometry. 空间领域
    mysql_type_null. 空值-type字段

    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(“字段为numeric \ n”);

    枚举值作为字符串返回。为此,检查那个类型价值是mysql_type_string.那个enum_flag.或者set_flag.标志设置在旗帜价值。