本节介绍除预处理语句、异步接口和复制流接口外的C API数据结构。有关这些的信息,请参阅第6.2节,“C API准备好的语句数据结构”那第7.2节,“C API异步接口数据结构”,第10.2节“C API二进制日志数据结构”.
这个结构表示一个数据库连接的处理程序。它用于几乎所有MySQL函数。不要试图复制一个
mysql.
结构体。无法保证这样的副本将是可用的。这是一行数据的类型安全表示。它目前作为计数的字节字符串的数组实现。(如果字段值可能包含二进制数据,则无法将这些视为空终止字符串,因为此类值可能包含NULL字节内部。)通过呼叫获得行
mysql_fetch_row()
.此结构包含元数据:有关字段的信息,例如字段的名称,类型和大小。在本节后面将更详细地描述其成员。你可以获得
MYSQL_FIELD
通过致电的每个字段的结构作用()
反复。字段值不是该结构的一部分;它们包含在一个MYSQL_ROW
结构体。这是MySQL字段列表中偏移量的类型安全表示。(用
mysql_field_seek()
)。偏移量是一行中的字段数,从零开始。用于64位无符号整数的类型。这
my_ulonglong
type在MySQL 8.0.18之前使用。从MySQL 8.0.18开始,使用uint64_t
C类型。一个布尔类型,对于真实的值(非零)或假(零)。这
my_bool.
type在MySQL 8.0之前使用。从MySQL 8.0开始,使用保龄球
或int
C类型。笔记的变化
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
字段 - >类型
成员描述后: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->标志&not_null_flag)printf(“字段不能为null \ n”);
属性的布尔状态,可以使用下表所示的便利宏来确定
旗帜
价值。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.
VARCHAR
或varbinary.
场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_TIME
那mysql_type_datetime.
,MYSQL_TYPE_TIMESTAMP
代码。你可以使用
IS_NUM ()
宏来测试字段是否为数字类型。通过类型
价值IS_NUM ()
如果字段是数值,则计算为TRUE:如果IS_NUM(字段->类型))printf(“字段是数字\n”);
枚举
和放
值作为字符串返回。对于这些,检查类型
值是MYSQL_TYPE_STRING
而ENUM_FLAG
或SET_FLAG
中设置的旗帜
价值。