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, "Кэширование Готовых Операторов и Сохраненных Программ".