|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Готовые операторы передают данные между клиентом и сервером, используя переменные языка C на стороне клиента, которые соответствуют значениям SQL на стороне сервера. Если есть несоответствие между типом переменной C на стороне клиента и соответствующим типом значения SQL на стороне сервера, MySQL выполняет неявные преобразования типов в обоих направлениях.
MySQL знает код типа для значения SQL на стороне сервера. buffer_type значение в
MYSQL_BIND структура указывает на код типа переменной C, которая содержит значение
на стороне клиента. Два кода вместе говорят MySQL, какое преобразование должно быть выполнено, если любой. Вот
некоторые примеры:
Если Вы используете MYSQL_TYPE_LONG с int переменная, чтобы передать целочисленное значение к серверу, который
должен быть сохранен в a FLOAT столбец, MySQL преобразовывает значение в формат с плавающей
точкой прежде, чем сохранить это.
Если Вы выбираете SQL MEDIUMINT значение столбца, но определяют a buffer_type
значение MYSQL_TYPE_LONGLONG и используйте переменную C типа long long int как целевой буфер, MySQL преобразовывает MEDIUMINT значение (который требует меньше чем 8 байтов) для хранения
в long long int (8-байтовая переменная).
Если Вы выбираете числовой столбец со значением 255 в a char[4]
символьный массив и определяет a buffer_type значение MYSQL_TYPE_STRING, получающееся значение в массиве является 4 строками
байтов '255\0'.
Возвраты MySQL DECIMAL значения как строковое представление исходного серверного
значения, которое является, почему соответствующий тип C char[]. Например,
12.345 возвращается клиенту как '12.345'. Если
Вы определяете MYSQL_TYPE_NEWDECIMAL и свяжите строковый буфер с MYSQL_BIND структура, mysql_stmt_fetch() хранит значение в буфере как строка без
преобразования. Если вместо этого Вы определяете числовую переменную и вводите код, mysql_stmt_fetch() преобразовывает строковый формат DECIMAL оцените числовой форме.
Для MYSQL_TYPE_BIT введите код, BIT значения возвращаются в строковый буфер, который является, почему
соответствующий тип C char[]. Значение представляет немного строки, которая
требует интерпретации на стороне клиента. Чтобы возвратить значение как тип, который легче иметь дело с,
можно заставить значение быть брошенным к целому числу, используя любой из следующих типов выражений:
SELECT bit_col + 0 FROM tSELECT CAST(bit_col AS UNSIGNED) FROM t
Чтобы получить значение, обяжите целочисленную переменную, достаточно большую содержать значение и определять соответствующий соответствующий целочисленный код типа.
Перед обязательными переменными к 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, "Кэширование Готовых Операторов и Сохраненных Программ".