在MySQL中对C/C++编程时使用的结构体MYSQL_FIELD、MYSQL_ROWS的实际原型定义如下:
typedef struct st_mysql_field MYSQL_FIELD;
typedef struct st_mysql_rows MYSQL_ROWS;
typedef struct st_mysql_field {
char *name; /*列名 */
char *org_name; /* 列原来的名字,就是在指定表别名前的名字 */
char *table; /* 该字段所在的表名*/
char *org_table; /* 该表被指定别名前的名字 */
char *db; /* 列所在的数据库*/
char *catalog; /* Catalog for table难道是表所在的目录? */
char *def; /* 应该是该字段的默认值吧,没对这个问题调试过) */
unsigned long length; /* Width of column (create length) 列的宽度*/
unsigned long max_length; /* Max width for selected set 最大宽度*/
unsigned int name_length; /* 列名的宽度*/
unsigned int org_name_length; /* 原列名的宽度*/
unsigned int table_length; /* 表名的宽度*/
unsigned int org_table_length; /* 原表名的宽度*/
unsigned int db_length; /* 数据库名长度*/
unsigned int catalog_length; /*目录名长度*/
unsigned int def_length; /* 默认值的宽度*/
unsigned int flags; /* Div flags分隔符标志 ?*/
unsigned int decimals; /* Number of decimals in field小数点后的数 */
unsigned int charsetnr; /* Character set 字符集*/
enum enum_field_types type; /* Type of field. See mysql_com.h for types字段类型 */
void *extension; /* 用于扩展*/
} MYSQL_FIELD;
typedef struct st_mysql_rows {
struct st_mysql_rows *next; /* list of rows链表 */
MYSQL_ROW data;
unsigned long length;
} MYSQL_ROWS;
typedef char **MYSQL_ROW; /* return data as array of strings数组字符串数据,晕了,开始我还以为这个结构会是多么的复制,原来就是一个字符串指针呢 */
typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field 当前字段的偏移,应该就是在表中字段的偏移位置了*/
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row 当前行的偏移*/
在MySQL服务器和客户端之间的数据传输是基于字段进行传输的,从class Protocol
结构中可以看到声明了一个
MYSQL_FIELD *next_mysql_field;
结构。但是MySQL从查询到一个字段到从数据库内存或文件中把这个字段发送到客户端的过程是怎样的呢?这个问题应该就是从Protocol类开始看了。当然不是说说这么简单的了。