Spec-Zone .ru
спецификации, руководства, описания, API

21.8.9.2. C API Готовые Преобразования типов Оператора

Готовые операторы передают данные между клиентом и сервером, используя переменные языка C на стороне клиента, которые соответствуют значениям SQL на стороне сервера. Если есть несоответствие между типом переменной C на стороне клиента и соответствующим типом значения SQL на стороне сервера, MySQL выполняет неявные преобразования типов в обоих направлениях.

MySQL знает код типа для значения SQL на стороне сервера. buffer_type значение в MYSQL_BIND структура указывает на код типа переменной C, которая содержит значение на стороне клиента. Два кода вместе говорят MySQL, какое преобразование должно быть выполнено, если любой. Вот некоторые примеры:

Перед обязательными переменными к MYSQL_BIND структуры, которые должны использоваться для того, чтобы выбрать значения столбцов, можно проверить коды типа на каждый столбец набора результатов. Это могло бы быть требуемым, если бы Вы хотите определить, который типы переменной были бы лучшими, чтобы использовать, чтобы избежать преобразований типов. Чтобы получить коды типа, вызвать mysql_stmt_result_metadata() после выполнения готового оператора с mysql_stmt_execute(). Метаданные обеспечивают доступ к кодам типа для набора результатов как описано в Разделе 21.8.11.23,"mysql_stmt_result_metadata()", и Раздел 21.8.5, "Структуры данных API C".

Чтобы определить, содержат ли выведенные строковые значения в наборе результатов, возвращенном из сервера, двоичный файл или недвоичных данных, проверьте ли charsetnr значение метаданных набора результатов 63 (см. Раздел 21.8.5, "Структуры данных API C"). Если так, набор символов binary, который указывает на двоичный файл, а не недвоичных данных. Это позволяет Вам различить BINARY от CHAR, VARBINARY от VARCHAR, и BLOB типы от TEXT типы.

Если Вы вызываете max_length элемент MYSQL_FIELD структуры метаданных столбца, которые будут установлены (вызывая mysql_stmt_attr_set()), знать, что max_length значения для набора результатов указывают на продолжительности самого долгого строкового представления значений результата, не продолжительности двоичного представления. Таким образом, max_length не обязательно соответствует размеру буферов, должен был выбрать значения с протоколом двоичной синхронной передачи данных, используемым для готовых операторов. Выберите размер буферов согласно типам переменных, в которые Вы выбираете значения. Например, a TINYINT у столбца, содержащего значение-128, мог бы быть a max_length значение 4. Но двоичное представление любого TINYINT значение требует только 1 байта для хранения, таким образом, можно предоставить a signed char переменная, в которой можно сохранить значение и установить is_unsigned указать, что значения подписываются.

Метаданные изменяются на таблицы или просматривают упомянутый готовыми операторами, обнаруживаются и вызывают автоматическую переподготовку оператора, когда это затем выполняется. Для получения дополнительной информации см. Раздел 8.9.4, "Кэширование Готовых Операторов и Сохраненных Программ".