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 TEXTCHARVARCHAR
char[] MYSQL_TYPE_BLOB BLOBBINARYVARBINARY
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 類型、此類值在結果集元資料中具有的對應類型代碼,以及將不進行轉換接收 SQL 值時建議繫結至 MYSQL_BIND 結構的 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
CHARBINARY MYSQL_TYPE_STRING char[]
VARCHARVARBINARY MYSQL_TYPE_VAR_STRING char[]
TINYBLOBTINYTEXT MYSQL_TYPE_TINY_BLOB char[]
BLOBTEXT MYSQL_TYPE_BLOB char[]
MEDIUMBLOBMEDIUMTEXT MYSQL_TYPE_MEDIUM_BLOB char[]
LONGBLOBLONGTEXT MYSQL_TYPE_LONG_BLOB char[]
BIT MYSQL_TYPE_BIT char[]