8.4.1 Типы данных C API
MYSQL
-
Данная структура представляет дескриптор соединения с базой данных.
Используется почти во всех функциях MySQL.
MYSQL_RES
-
Эта структура содержит результат запроса, возвратившего строки (
SELECT
,
SHOW
, DESCRIBE
, EXPLAIN
). Возвращенная из запроса информация далее в этом
разделе называется результирующим набором данных.
MYSQL_ROW
-
Является ``типобезопасным'' представлением данных одной строки.
В настоящее время этот тип реализован как массив строк с фиксированным
количеством байтов (их нельзя трактовать как строки с нулевым символом в
конце, если величины полей могут содержать двоичные данные, поскольку они
могут содержать ноль байтов). Строки можно получить вызовом функции
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. Может не работать
в некоторых системах при выводе величины типа my_ulonglong
. Для вывода
подобной величины следует преобразовать ее в тип unsigned long
и
использовать формат %lu
. Пример:
printf (Количество строк: %lu\n", (unsigned long) mysql_num_rows(result));
Структура MYSQL_FIELD
содержит следующие перечисленные ниже элементы:
char * name
-
Имя данного поля, заданное строкой с нулевым символом в конце.
char * table
-
Имя таблицы, содержащей это поле, если оно невычисляемое. Для полей,
получаемых в результате вычислений, величина
table
представляет собой
пустую строку.
char * def
-
Значение по умолчанию этого поля, заданное строкой с нулевым символом в
конце. Задается только при использовании функции
mysql_list_fields()
.
enum enum_field_types type
-
Тип данного поля. Величина
type
может быть одной из следующих:
Тип величины | Описание типа
|
FIELD_TYPE_TINY | Поле TINYINT
|
FIELD_TYPE_SHORT | Поле SMALLINT
|
FIELD_TYPE_LONG | Поле INTEGER
|
FIELD_TYPE_INT24 | Поле MEDIUMINT
|
FIELD_TYPE_LONGLONG | Поле BIGINT
|
FIELD_TYPE_DECIMAL | Поле DECIMAL или NUMERIC
|
FIELD_TYPE_FLOAT | Поле FLOAT
|
FIELD_TYPE_DOUBLE | Поле DOUBLE или REAL
|
FIELD_TYPE_TIMESTAMP | Поле TIMESTAMP
|
FIELD_TYPE_DATE | Поле DATE
|
FIELD_TYPE_TIME | Поле TIME
|
FIELD_TYPE_DATETIME | Поле DATETIME
|
FIELD_TYPE_YEAR | Поле YEAR
|
FIELD_TYPE_STRING | Строка поля (CHAR или VARCHAR )
|
FIELD_TYPE_BLOB | BLOB или TEXT поле (используется max_length для определения максимальной длинны)
|
FIELD_TYPE_SET | Поле типа SET
|
FIELD_TYPE_ENUM | Поле типа ENUM
|
FIELD_TYPE_NULL | Поле типа NULL
|
FIELD_TYPE_CHAR | Не рекомендуется; лучше использовать FIELD_TYPE_TINY
|
Можно использовать макрос IS_NUM()
для проверки, является ли тип поля
числовым. В макросе IS_NUM()
следует указать величину type
и, если поле
имеет числовой тип, будет возвращено значение TRUE
:
if (IS_NUM(field->type))
printf("Field is numeric\n");
unsigned int length
-
Размер данного поля в том виде, в каком он указан в определении таблицы.
unsigned int max_length
-
Максимальный размер данного поля в результирующем наборе данных (длина
самой большой величины поля для строк в текущем результирующем наборе
данных). При использовании
mysql_store_result()
или mysql_list_fields()
данная переменная содержит максимальную длину для данного поля. При
использовании mysql_use_result()
значение этой переменной равно нулю.
unsigned int flags
-
Различные двоичные флаги для данного поля. Величина
flags
может иметь ноль
или больше двоичных значений следующего набора флагов:
Значение флага | описание флага
|
NOT_NULL_FLAG | Поле не может содержать значение NULL
|
PRI_KEY_FLAG | Поле является частью первичного ключа
|
UNIQUE_KEY_FLAG | Поле является частью уникального ключа
|
MULTIPLE_KEY_FLAG | Поле является частью не уникального ключа
|
UNSIGNED_FLAG | Поле имеет атрибут UNSIGNED
|
ZEROFILL_FLAG | Поле имеет атрибут ZEROFILL
|
BINARY_FLAG | Поле имеет атрибут BINARY
|
AUTO_INCREMENT_FLAG | Поле имеет атрибут AUTO_INCREMENT
|
ENUM_FLAG | Поле имеет тип ENUM (не рекомендуется)
|
SET_FLAG | Поле имеет тип SET (не рекомендуется)
|
BLOB_FLAG | Поле имеет тип BLOB или TEXT (не рекомендуется)
|
TIMESTAMP_FLAG | Поле имеет тип TIMESTAMP (не рекомендуется)
|
Использование флагов BLOB_FLAG
, ENUM_FLAG
, SET_FLAG
и TIMESTAMP_FLAG
не
рекомендуется, поскольку они указывают скорее тип поля, чем атрибут этого
типа. Вместо этого более предпочтительно определять тип поля описанным
выше способом field->type
в отношении полей FIELD_TYPE_BLOB
,
FIELD_TYPE_ENUM
, FIELD_TYPE_SET
или FIELD_TYPE_TIMESTAMP
. Следующий пример
иллюстрирует типичное использование величины flags
:
if (field->flags & NOT_NULL_FLAG)
printf("Field can't be null\n");
Можно использовать следующие возможности макросов для определения булевого
значения величины flags
:
Статус флага | Описание
|
IS_NOT_NULL(flags) | Возвращает TRUE, если данное поле определено как NOT NULL
|
IS_PRI_KEY(flags) | Возвращает TRUE, если данное поле является первичным ключом
|
IS_BLOB(flags) | Возвращает TRUE, если данное поле имеет тип BLOB или TEXT (не рекомендуется; более предпочтительно field->type )
|
unsigned int decimals
-
Возвращает число десятичных знаков для числовых полей.
Add your own comment.