Что такое тип данных C для столбца BOOLEAN в подготовленном операторе?

0

Можно создать столбец с BOOLEAN данных BOOLEAN как описано в разделе Создание логического столбца в MySQL, со значением false по умолчанию. Например:

CREATE TABLE Persons (
  ID int NOT NULL,
  LastName varchar(255),
  FirstName varchar(255),
  Married boolean DEFAULT false
);

Типы данных MySQL, такие как MYSQL_TYPE_INT и MYSQL_TYPE_STRING, подробно описаны в руководстве по адресу 23.8.9.1 C Коды типов подготовленных операторов API. Однако в руководстве не обсуждается BOOLEAN данных BOOLEAN или его использование в подготовленном утверждении. Например:

#include <stdbool.h>
#include <mysql/mysql.h>

MYSQL_BIND bind[1];
...

bool val = false;
unsigned long len;
len = sizeof(???);

bind[0].buffer_type= MYSQL_TYPE_<???>;
bind[0].buffer= (char*)&val;
bind[0].buffer_length = len;
bind[0].is_null= 0;
bind[0].length= &len;

Какой тип данных мы используем для типа BOOLEAN, и как мы вычисляем MYSQL_BIND.buffer_length?

Теги:
boolean
prepared-statement

1 ответ

2
Лучший ответ

В MySQL BOOLEAN является синонимом TINYINT(1).

Таким образом, вы будете использовать MYSQL_TYPE_TINY привязки MYSQL_TYPE_TINY.

  • 0
    Спасибо @duskwuff. Нужно ли конвертировать bool val в my_bool b = val , а затем использовать его как bind[0].buffer= (char*)&b; ?
  • 0
    Да, ты должен сделать это. Размер bool не гарантируется, поэтому приведение bool * к char * может привести к неожиданным эффектам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню