This structure represents a handle to one database connection.
It is used for almost all MySQL functions. You should not try
to make a copy of a MYSQL structure. There
is no guarantee that such a copy will be usable.
This structure represents the result of a query that returns
rows (SELECT, SHOW,
DESCRIBE, EXPLAIN). The
information returned from a query is called the
result set in the remainder of this
section.
This is a type-safe representation of one row of data. It is
currently implemented as an array of counted byte strings.
(You cannot treat these as null-terminated strings if field
values may contain binary data, because such values may
contain null bytes internally.) Rows are obtained by calling
mysql_fetch_row().
This structure contains information about a field, such as the
field's name, type, and size. Its members are described in
more detail here. You may obtain the
MYSQL_FIELD structures for each field by
calling mysql_fetch_field() repeatedly.
Field values are not part of this structure; they are
contained in a MYSQL_ROW structure.
This is a type-safe representation of an offset into a MySQL
field list. (Used by mysql_field_seek().)
Offsets are field numbers within a row, beginning at zero.
The type used for the number of rows and for
mysql_affected_rows(),
mysql_num_rows(), and
mysql_insert_id(). This type provides a
range of 0 to 1.84e19.
On some systems, attempting to print a value of type
my_ulonglong does not work. To print such a
value, convert it to unsigned long and use
a %lu print format. Example:
printf ("Number of rows: %lu\n",
(unsigned long) mysql_num_rows(result));
A boolean type, for values that are true (non-zero) or false (zero).
The MYSQL_FIELD structure contains the members
listed here:
char * name
The name of the field, as a null-terminated string. If the
field was given an alias with an AS clause,
the value of name is the alias.
char * org_name
The name of the field, as a null-terminated string. Aliases are ignored. This member was added in MySQL 4.1.0.
char * table
The name of the table containing this field, if it isn't a
calculated field. For calculated fields, the
table value is an empty string. If the
table was given an alias with an AS clause,
the value of table is the alias.
char * org_table
The name of the table, as a null-terminated string. Aliases are ignored. This member was added in MySQL 4.1.0.
char * db
The name of the database that the field comes from, as a
null-terminated string. If the field is a calculated field,
db is an empty string. This member was
added in MySQL 4.1.0.
char * catalog
The catalog name. This value is always
"def". This member was added in MySQL
4.1.1.
char * def
The default value of this field, as a null-terminated string.
This is set only if you use
mysql_list_fields().
unsigned long length
The width of the field, as specified in the table definition.
unsigned long max_length
The maximum width of the field for the result set (the length
of the longest field value for the rows actually in the result
set). If you use mysql_store_result() or
mysql_list_fields(), this contains the
maximum length for the field. If you use
mysql_use_result(), the value of this
variable is zero.
The value of max_length is the length of
the string representation of the values in the result set. For
example, if you retrieve a FLOAT column and
the “widest” value is -12.345,
max_length is 7 (the length of
'-12.345').
If you are using the prepared statements,
max_length is not set by default because
for the binary protocol the lengths of the values depend on
the types of the values in the result set. (See
Section 17.2.5, “C API Prepared Statement Data types”.) If you
want the max_length values anyway, enable
the STMT_ATTR_UPDATE_MAX_LENGTH option with
mysql_stmt_attr_set() and the lengths will
be set when you call
mysql_stmt_store_result(). (See
Section 17.2.7.3, “mysql_stmt_attr_set()”, and
Section 17.2.7.27, “mysql_stmt_store_result()”.)
unsigned int name_length
The length of name. This member was added
in MySQL 4.1.0.
unsigned int org_name_length
The length of org_name. This member was
added in MySQL 4.1.0.
unsigned int table_length
The length of table. This member was added
in MySQL 4.1.0.
unsigned int org_table_length
The length of org_table. This member was
added in MySQL 4.1.0.
unsigned int db_length
The length of db. This member was added in
MySQL 4.1.0.
unsigned int catalog_length
The length of catalog. This member was
added in MySQL 4.1.1.
unsigned int def_length
The length of def. This member was added in
MySQL 4.1.0.
unsigned int flags
Different bit-flags for the field. The
flags value may have zero or more of the
following bits set:
| Flag Value | Flag Description |
NOT_NULL_FLAG |
Field can't be NULL
|
PRI_KEY_FLAG |
Field is part of a primary key |
UNIQUE_KEY_FLAG |
Field is part of a unique key |
MULTIPLE_KEY_FLAG |
Field is part of a non-unique key |
UNSIGNED_FLAG |
Field has the UNSIGNED attribute |
ZEROFILL_FLAG |
Field has the ZEROFILL attribute |
BINARY_FLAG |
Field has the BINARY attribute |
AUTO_INCREMENT_FLAG |
Field has the AUTO_INCREMENT attribute |
ENUM_FLAG |
Field is an ENUM (deprecated) |
SET_FLAG |
Field is a SET (deprecated) |
BLOB_FLAG |
Field is a BLOB or TEXT
(deprecated) |
TIMESTAMP_FLAG |
Field is a TIMESTAMP (deprecated) |
Use of the BLOB_FLAG,
ENUM_FLAG, SET_FLAG, and
TIMESTAMP_FLAG flags is deprecated because
they indicate the type of a field rather than an attribute of
its type. It is preferable to test
field->type against
MYSQL_TYPE_BLOB,
MYSQL_TYPE_ENUM,
MYSQL_TYPE_SET, or
MYSQL_TYPE_TIMESTAMP instead.
The following example illustrates a typical use of the
flags value:
if (field->flags & NOT_NULL_FLAG)
printf("Field can't be null\n");
You may use the following convenience macros to determine the
boolean status of the flags value:
| Flag Status | Description |
IS_NOT_NULL(flags) |
True if this field is defined as NOT NULL
|
IS_PRI_KEY(flags) |
True if this field is a primary key |
IS_BLOB(flags) |
True if this field is a BLOB or
TEXT (deprecated; test
field->type instead) |
unsigned int decimals
The number of decimals for numeric fields.
unsigned int charsetnr
The character set number for the field. This member was added in MySQL 4.1.0.
enum enum_field_types type
The type of the field. The type value may
be one of the MYSQL_TYPE_ symbols shown in
the following table. Before MySQL 4.1, the symbol names begin
with FIELD_TYPE_ rather than
MYSQL_TYPE_. The older types still are
recognized for backward compatibility.
| Type Value | Type Description |
MYSQL_TYPE_TINY |
TINYINT field |
MYSQL_TYPE_SHORT |
SMALLINT field |
MYSQL_TYPE_LONG |
INTEGER field |
MYSQL_TYPE_INT24 |
MEDIUMINT field |
MYSQL_TYPE_LONGLONG |
BIGINT field |
MYSQL_TYPE_DECIMAL |
DECIMAL or NUMERIC field |
MYSQL_TYPE_FLOAT |
FLOAT field |
MYSQL_TYPE_DOUBLE |
DOUBLE or REAL field |
MYSQL_TYPE_TIMESTAMP |
TIMESTAMP field |
MYSQL_TYPE_DATE |
DATE field |
MYSQL_TYPE_TIME |
TIME field |
MYSQL_TYPE_DATETIME |
DATETIME field |
MYSQL_TYPE_YEAR |
YEAR field |
MYSQL_TYPE_STRING |
CHAR or BINARY field |
MYSQL_TYPE_VAR_STRING |
VARCHAR or VARBINARY field |
MYSQL_TYPE_BLOB |
BLOB or TEXT field (use
max_length to determine the maximum
length) |
MYSQL_TYPE_SET |
SET field |
MYSQL_TYPE_ENUM |
ENUM field |
MYSQL_TYPE_GEOMETRY |
Spatial field (MySQL 4.1.0 and up) |
MYSQL_TYPE_NULL |
NULL-type field |
You can use the IS_NUM() macro to test
whether a field has a numeric type. Pass the
type value to IS_NUM()
and it evaluates to TRUE if the field is numeric:
if (IS_NUM(field->type))
printf("Field is numeric\n");
To distinguish between binary and non-binary data for string
data types, check whether the charsetnr
value is 63. If so, the character set is
binary, which indicates binary rather than
non-binary data. This is how to distinguish between
BINARY and CHAR,
VARBINARY and VARCHAR,
and BLOB and TEXT.

User Comments
Add your own comment.