【问题标题】:What is the C datatype for BOOLEAN column in a Prepared Statement?准备语句中 BOOLEAN 列的 C 数据类型是什么?
【发布时间】:2019-03-14 01:10:49
【问题描述】:

可以创建具有BOOLEAN 数据类型的列,如Create boolean column in MySQL with false as default value 中所述。例如:

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

MYSQL_TYPE_INTMYSQL_TYPE_STRING 等 MySQL 数据类型在手册 23.8.9.1 C API Prepared Statement Type Codes 中有详细说明。但是,该手册没有讨论 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

【问题讨论】:

    标签: mysql c boolean prepared-statement


    【解决方案1】:

    在 MySQL 中,BOOLEAN is a synonym for TINYINT(1)

    因此,您将使用 MYSQL_TYPE_TINY 绑定类型。

    【讨论】:

    • 谢谢@duskwuff。我是否需要将bool val 转换为my_bool b = val,然后像bind[0].buffer= (char*)&amp;b; 一样使用它?
    • 是的,你应该这样做。 bool 的大小无法保证,因此将bool * 转换为char * 可能会产生意想不到的效果。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2013-04-12
    • 2013-11-23
    相关资源
    最近更新 更多