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 類型、這些值在結果集元資料中擁有的對應類型代碼,以及建議繫結到 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
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[]