|
C API Datatypes
MYSQL
This structure
represents a handle to one database connection. It is used for almost all MySQL
functions.
MYSQL_RES
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.
MYSQL_ROW
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().
MYSQL_FIELD
This structure
contains information about a field, such as the field's name, type, and size.
Its members are described in more detail below. 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.
MYSQL_FIELD_OFFSET
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.
my_ulonglong
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 will 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));
The MYSQL_FIELD
structure contains the members listed below:
char * name
The name of the
field, as a null-terminated string.
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.
char * def
The default value
of this field, as a null-terminated string. This is set only if you use
mysql_list_fields().
enum enum_field_types
type
The type of the
field. The type value
may be one of the following:
|
Type value
|
Type meaning
|
|
FIELD_TYPE_TINY
|
TINYINT field
|
|
FIELD_TYPE_SHORT
|
SMALLINT field
|
|
FIELD_TYPE_LONG
|
INTEGER field
|
|
FIELD_TYPE_INT24
|
MEDIUMINT field
|
|
FIELD_TYPE_LONGLONG
|
BIGINT field
|
|
FIELD_TYPE_DECIMAL
|
DECIMAL or
NUMERIC field
|
|
FIELD_TYPE_FLOAT
|
FLOAT field
|
|
FIELD_TYPE_DOUBLE
|
DOUBLE or
REAL field
|
|
FIELD_TYPE_TIMESTAMP
|
TIMESTAMP field
|
|
FIELD_TYPE_DATE
|
DATE field
|
|
FIELD_TYPE_TIME
|
TIME field
|
|
FIELD_TYPE_DATETIME
|
DATETIME field
|
|
FIELD_TYPE_YEAR
|
YEAR field
|
|
FIELD_TYPE_STRING
|
String (CHAR or
VARCHAR) field
|
|
FIELD_TYPE_BLOB
|
BLOB or
TEXT field (use
max_length to determine
the maximum length)
|
|
FIELD_TYPE_SET
|
SET field
|
|
FIELD_TYPE_ENUM
|
ENUM field
|
|
FIELD_TYPE_NULL
|
NULL-type field
|
|
FIELD_TYPE_CHAR
|
Deprecated; use
FIELD_TYPE_TINY instead
|
You can use the
IS_NUM() macro to test
whether or not a field has a numeric type. Pass the
type value to
IS_NUM() and it will
evaluate to TRUE if the field is numeric:
if
(IS_NUM(field->type))
printf("Field is numeric\n");
unsigned int length
The width of the
field, as specified in the table definition.
unsigned int
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.
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 meaning
|
|
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)
|
|
BLOB_FLAG
|
Field is a BLOB or
TEXT (deprecated)
|
|
TIMESTAMP_FLAG
|
Field is a
TIMESTAMP (deprecated)
|
Use of the
BLOB_FLAG,
ENUM_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
FIELD_TYPE_BLOB,
FIELD_TYPE_ENUM, or
FIELD_TYPE_TIMESTAMP
instead. The example below 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:
|
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.
|