6.2.1 C API 预处理语句类型代码

MYSQL_BIND 结构的 buffer_type 成员指示绑定到语句参数或结果集列的 C 语言变量的数据类型。对于输入,buffer_type 指示包含要发送到服务器的值的变量的类型。对于输出,它指示应将从服务器接收的值存储到的变量的类型。

下表显示了发送到服务器的输入值的 MYSQL_BIND 结构的 buffer_type 成员的允许值。该表显示了您可以使用的 C 变量类型、相应的类型代码,以及可以在不转换的情况下使用提供的值的 SQL 数据类型。根据要绑定的 C 语言变量的数据类型选择 buffer_type 值。对于整数类型,您还应该设置 is_unsigned 成员以指示变量是有符号还是无符号。

表 6.1 MYSQL_BIND 结构允许的输入数据类型

输入变量 C 类型 buffer_type 目标值的 SQL 类型
signed char MYSQL_TYPE_TINY TINYINT
short int MYSQL_TYPE_SHORT SMALLINT
int MYSQL_TYPE_LONG INT
long long int MYSQL_TYPE_LONGLONG BIGINT
float MYSQL_TYPE_FLOAT FLOAT
double MYSQL_TYPE_DOUBLE DOUBLE
MYSQL_TIME MYSQL_TYPE_TIME TIME
MYSQL_TIME MYSQL_TYPE_DATE DATE
MYSQL_TIME MYSQL_TYPE_DATETIME DATETIME
MYSQL_TIME MYSQL_TYPE_TIMESTAMP TIMESTAMP
char[] MYSQL_TYPE_STRING TEXT, CHAR, VARCHAR
char[] MYSQL_TYPE_BLOB BLOB, BINARY, VARBINARY
MYSQL_TYPE_NULL NULL

按照 第 6.2 节,“C API 预处理语句数据结构” 中对 is_null 成员的说明使用 MYSQL_TYPE_NULL

对于输入字符串数据,请根据值是字符(非二进制)还是二进制字符串使用 MYSQL_TYPE_STRINGMYSQL_TYPE_BLOB

  • MYSQL_TYPE_STRING 指示字符输入字符串数据。假定该值采用 character_set_client 系统变量指示的字符集。如果服务器将值存储到具有不同字符集的列中,它会将值转换为该字符集。

  • MYSQL_TYPE_BLOB 指示二进制输入字符串数据。该值被视为具有 binary 字符集。也就是说,它被视为一个字节字符串,并且不会发生转换。

下表显示了从服务器接收的输出值的 MYSQL_BIND 结构的 buffer_type 成员的允许值。该表显示了接收值的 SQL 类型、此类值在结果集元数据中的相应类型代码,以及建议绑定到 MYSQL_BIND 结构以接收 SQL 值而无需转换的 C 语言数据类型。根据要绑定的 C 语言变量的数据类型选择 buffer_type 值。对于整数类型,您还应该设置 is_unsigned 成员以指示变量是有符号还是无符号。

表 6.2 MYSQL_BIND 结构允许的输出数据类型

接收值的 SQL 类型 buffer_type 输出变量 C 类型
TINYINT MYSQL_TYPE_TINY signed char
SMALLINT MYSQL_TYPE_SHORT short int
MEDIUMINT MYSQL_TYPE_INT24 int
INT MYSQL_TYPE_LONG int
BIGINT MYSQL_TYPE_LONGLONG long long int
FLOAT MYSQL_TYPE_FLOAT float
DOUBLE MYSQL_TYPE_DOUBLE double
DECIMAL MYSQL_TYPE_NEWDECIMAL char[]
YEAR MYSQL_TYPE_SHORT short int
TIME MYSQL_TYPE_TIME MYSQL_TIME
DATE MYSQL_TYPE_DATE MYSQL_TIME
DATETIME MYSQL_TYPE_DATETIME MYSQL_TIME
TIMESTAMP MYSQL_TYPE_TIMESTAMP MYSQL_TIME
CHAR, BINARY MYSQL_TYPE_STRING char[]
VARCHAR, VARBINARY MYSQL_TYPE_VAR_STRING char[]
TINYBLOB, TINYTEXT MYSQL_TYPE_TINY_BLOB char[]
BLOB, TEXT MYSQL_TYPE_BLOB char[]
MEDIUMBLOB, MEDIUMTEXT MYSQL_TYPE_MEDIUM_BLOB char[]
LONGBLOB, LONGTEXT MYSQL_TYPE_LONG_BLOB char[]
BIT MYSQL_TYPE_BIT char[]