Типы данных 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
Возвращает число десятичных знаков для числовых полей.
1 2 3 4 5 6
8 8 8
| |