このセクションでは、プリペアドステートメントに使用されるもの以外の C API データ構造について説明します。後者に関する情報については、セクション23.7.9「C API プリペアドステートメントデータ構造」を参照してください。
-
この構造は 1 つのデータベース接続へのハンドルを表します。それはほとんどすべての MySQL 関数に使われます。
MYSQL
構造のコピーを作成しようとしないでください。そのようなコピーが使用可能である保証はありません。 -
この構造は行 (
SELECT
、SHOW
、DESCRIBE
、EXPLAIN
) を返すクエリーの結果を表します。クエリーから返される情報は、このセクションの残りの部分で、結果セットと呼ばれています。 -
これは 1 行のデータのタイプセーフな表現です。それは現在カウントされるバイト文字列の配列として実装されています。(フィールド値にバイナリデータが含まれている可能性がある場合、内部でそれらの値に NULL バイトが格納される可能性があるため、これらを NULL 終端文字列として扱うことはできません。)行は
mysql_fetch_row()
を呼び出すことによって取得します。 -
この構造には、メタデータ (フィールドの名前、型、サイズなどのフィールドに関する情報) が格納されます。そのメンバーについては、このセクションのあとの方でさらに詳しく説明しています。
mysql_fetch_field()
を繰り返し呼び出すことによって、フィールドごとに、MYSQL_FIELD
構造を取得できます。フィールド値はこの構造に含まれません。それらはMYSQL_ROW
構造に含まれます。 -
これは MySQL フィールドリスト内へのオフセットのタイプセーフな表現です。(
mysql_field_seek()
で使用されます。)オフセットは行内のゼロから始まるフィールド番号です。 -
行数と
mysql_affected_rows()
、mysql_num_rows()
、およびmysql_insert_id()
に使用される型。この型は、0
から1.84e19
までの範囲を提供します。一部のシステムでは、型
my_ulonglong
の値を出力しようとしても機能しません。このような値を出力するには、それをunsigned long
に変換して、%lu
出力形式を使用します。例:printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));
-
true (ゼロ以外) または false (ゼロ) の値のブール型。
MYSQL_FIELD
構造には、次のリストに説明するメンバーが格納されます。この定義は、SELECT
ステートメントによって生成されるものなど、主に結果セットのカラムに適用します。MySQL 5.6 で、MYSQL_FIELD
構造は、プリペアド CALL
ステートメントを使用して実行されたストアドプロシージャーから返される OUT
および INOUT
パラメータのメタデータを提供するためにも使用されます。そのようなパラメータでは、構造メンバーの一部はカラム値の意味と異なる意味を持ちます。
-
char * name
NULL 終端文字列としてのフィールドの名前。フィールドに
AS
句によってエイリアスが与えられている場合、name
の値はエイリアスになります。プロシージャーパラメータの場合は、パラメータ名。 -
char * org_name
NULL 終端文字列としてのフィールドの名前。エイリアスは無視されます。式の場合、値は空の文字列です。プロシージャーパラメータの場合は、パラメータ名。
-
char * table
このフィールドが計算されるフィールドでない場合、それを格納するテーブルの名前。計算されるフィールドの場合、
table
値は空の文字列です。カラムがビューから選択される場合、table
はそのビューを指定します。テーブルまたはビューにAS
句によってエイリアスが与えられている場合、table
の値はエイリアスになります。UNION
の場合、値は空の文字列です。プロシージャーパラメータの場合はプロシージャー名。 -
char * org_table
NULL 終端文字列としてのテーブルの名前。エイリアスは無視されます。カラムがビューから選択される場合、
org_table
はそのビューを指定します。UNION
の場合、値は空の文字列です。プロシージャーパラメータの場合はプロシージャー名。 -
char * db
NULL 終端文字列としてのフィールドの取得元のデータベースの名前。フィールドが計算されるフィールドである場合、
db
は空の文字列になります。UNION
の場合、値は空の文字列です。プロシージャーパラメータの場合は、プロシージャーを格納するデータベースの名前。 -
char * catalog
カタログ名。この値は常に
"def"
です。 -
char * def
NULL 終端文字列としてのこのフィールドのデフォルト値。これは
mysql_list_fields()
を使用する場合にのみ設定します。 -
unsigned long length
フィールドの幅。これはバイト単位での表示の長さに対応します。
サーバーは結果セットを生成する前に、
length
値を判断するため、これは、結果セットに対するクエリーによって生成される実際の値を前もって知ることなく、結果カラムの可能性のある最大値を保持できる、データ型に必要な最小の長さになります。 -
unsigned long max_length
結果セットのフィールドの最大幅 (結果セット内の実際の行の最大長フィールド値のバイト単位での長さ)。
mysql_store_result()
またはmysql_list_fields()
を使用した場合、これにはフィールドの最大長が含まれます。mysql_use_result()
を使用した場合、この変数の値はゼロになります。max_length
の値は、結果セット内の値の文字列表現の長さになります。たとえば、FLOAT
カラムを取得し、「最大幅」の値が-12.345
である場合、max_length
は 7 ('-12.345'
の長さ) となります。プリペアドステートメントを使用している場合、バイナリプロトコルでは、値の長さが結果セット内の値の型によって異なるため、
max_length
はデフォルトで設定されません。(セクション23.7.9「C API プリペアドステートメントデータ構造」を参照してください。)とにかくmax_length
値が必要な場合、mysql_stmt_attr_set()
でSTMT_ATTR_UPDATE_MAX_LENGTH
オプションを有効にすると、mysql_stmt_store_result()
を呼び出したときにその長さが設定されます。(セクション23.7.11.3「mysql_stmt_attr_set()」およびセクション23.7.11.28「mysql_stmt_store_result()」を参照してください。) -
unsigned int name_length
name
の長さ。 -
unsigned int org_name_length
org_name
の長さ。 -
unsigned int table_length
table
の長さ。 -
unsigned int org_table_length
org_table
の長さ。 -
unsigned int db_length
db
の長さ。 -
unsigned int catalog_length
catalog
の長さ。 -
unsigned int def_length
def
の長さ。 -
unsigned int flags
フィールドを説明するビットフラグ。
flags
値は、次の表に示すゼロ以上のビットセットを持つ可能性があります。フラグ値 フラグの説明 NOT_NULL_FLAG
フィールドは NULL
にできませんPRI_KEY_FLAG
フィールドは主キーの一部です UNIQUE_KEY_FLAG
フィールドは一意のキーの一部です MULTIPLE_KEY_FLAG
フィールドは一意でないキーの一部です UNSIGNED_FLAG
フィールドは UNSIGNED
属性を持ちますZEROFILL_FLAG
フィールドは ZEROFILL
属性を持ちますBINARY_FLAG
フィールドは BINARY
属性を持ちますAUTO_INCREMENT_FLAG
フィールドは AUTO_INCREMENT
属性を持ちますENUM_FLAG
フィールドは ENUM
ですSET_FLAG
フィールドは SET
ですBLOB_FLAG
フィールドは BLOB
またはTEXT
(非推奨) ですTIMESTAMP_FLAG
フィールドは TIMESTAMP
(非推奨) ですNUM_FLAG
フィールドは数値です。表のあとの補注を参照してください NO_DEFAULT_VALUE_FLAG
フィールドにはデフォルト値がありません。表のあとの補注を参照してください これらのフラグの一部はデータ型情報を示し、後述する
field->type
メンバーのMYSQL_TYPE_
値によって置き換えられるか、一緒に使用されます。xxx
BLOB
またはTIMESTAMP
値をチェックするには、type
がMYSQL_TYPE_BLOB
であるか、またはMYSQL_TYPE_TIMESTAMP
であるかをチェックします。(BLOB_FLAG
およびTIMESTAMP_FLAG
フラグは必要ありません。)ENUM
およびSET
値は文字列として返されます。これらについては、type
値がMYSQL_TYPE_STRING
で、flags
値にENUM_FLAG
またはSET_FLAG
フラグが設定されていることを確認します。
NUM_FLAG
はカラムが数値であることを示します。これには、MYSQL_TYPE_DECIMAL
、MYSQL_TYPE_NEWDECIMAL
、MYSQL_TYPE_TINY
、MYSQL_TYPE_SHORT
、MYSQL_TYPE_LONG
、MYSQL_TYPE_FLOAT
、MYSQL_TYPE_DOUBLE
、MYSQL_TYPE_NULL
、MYSQL_TYPE_LONGLONG
、MYSQL_TYPE_INT24
、およびMYSQL_TYPE_YEAR
の型のカラムが含まれます。NO_DEFAULT_VALUE_FLAG
は、カラムの定義にDEFAULT
句がないことを示しています。これはNULL
カラム (そのようなカラムはNULL
のデフォルトを持つため) またはAUTO_INCREMENT
カラム (これは暗黙的なデフォルト値を持ちます) には適用されません。次の例に
flags
値の一般的な使用を示します。if (field->flags & NOT_NULL_FLAG) printf("Field cannot be null\n");
次の表に示す便利なマクロを使用して、
flags
値のブールステータスを判断できます。フラグのステータス 説明 IS_NOT_NULL(flags)
このフィールドが NOT NULL
と定義されている場合は trueIS_PRI_KEY(flags)
このフィールドが主キーである場合は true IS_BLOB(flags)
このフィールドが BLOB
またはTEXT
(非推奨、代わりにfield->type
をテストしてください) の場合は true -
unsigned int decimals
数値フィールドの小数点以下の桁数および (MySQL 5.6.4 以降) 時間フィールドの小数秒の精度。
-
unsigned int charsetnr
フィールドの文字セット/照合順序ペアを示す ID 番号。
通常、結果セットの文字値は、
character_set_results
システム変数で示された文字セットに変換されます。この場合、charsetnr
はその変数で示された文字セットに対応します。文字セットの変換はcharacter_set_results
をNULL
に設定することによってサポートできます。この場合、charsetnr
は元のテーブルカラムまたは式の文字セットに対応します。セクション10.1.4「接続文字セットおよび照合順序」も参照してください。文字列データ型のバイナリおよび非バイナリデータを区別するには、
charsetnr
値が 63 であるかどうかをチェックします。その場合、文字セットはbinary
で、これは非バイナリデータではなく、バイナリを示します。これにより、BINARY
とCHAR
、VARBINARY
とVARCHAR
、およびBLOB
型とTEXT
型を区別できます。charsetnr
値はSHOW COLLATION
ステートメントのId
カラムまたはINFORMATION_SCHEMA
COLLATIONS
テーブルのID
カラムに表示される値と同じです。それらの情報ソースを使用して、特定のcharsetnr
値がどの文字セットと照合順序を示しているかを確認できます。mysql> SHOW COLLATION WHERE Id = 63; +-----------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-----------+---------+----+---------+----------+---------+ | binary | binary | 63 | Yes | Yes | 1 | +-----------+---------+----+---------+----------+---------+ mysql> SELECT COLLATION_NAME, CHARACTER_SET_NAME -> FROM INFORMATION_SCHEMA.COLLATIONS WHERE ID = 33; +-----------------+--------------------+ | COLLATION_NAME | CHARACTER_SET_NAME | +-----------------+--------------------+ | utf8_general_ci | utf8 | +-----------------+--------------------+
-
enum enum_field_types type
フィールドの型。
type
値は次の表に示すMYSQL_TYPE_
シンボルのいずれかになります。型の値 型の説明 MYSQL_TYPE_TINY
TINYINT
フィールドMYSQL_TYPE_SHORT
SMALLINT
フィールドMYSQL_TYPE_LONG
INTEGER
フィールドMYSQL_TYPE_INT24
MEDIUMINT
フィールドMYSQL_TYPE_LONGLONG
BIGINT
フィールドMYSQL_TYPE_DECIMAL
DECIMAL
またはNUMERIC
フィールドMYSQL_TYPE_NEWDECIMAL
高精度計算 DECIMAL
またはNUMERIC
MYSQL_TYPE_FLOAT
FLOAT
フィールドMYSQL_TYPE_DOUBLE
DOUBLE
またはREAL
フィールドMYSQL_TYPE_BIT
BIT
フィールドMYSQL_TYPE_TIMESTAMP
TIMESTAMP
フィールドMYSQL_TYPE_DATE
DATE
フィールドMYSQL_TYPE_TIME
TIME
フィールドMYSQL_TYPE_DATETIME
DATETIME
フィールドMYSQL_TYPE_YEAR
YEAR
フィールドMYSQL_TYPE_STRING
CHAR
またはBINARY
フィールドMYSQL_TYPE_VAR_STRING
VARCHAR
またはVARBINARY
フィールドMYSQL_TYPE_BLOB
BLOB
またはTEXT
フィールド (max_length
を使用して最大長を判断します)MYSQL_TYPE_SET
SET
フィールドMYSQL_TYPE_ENUM
ENUM
フィールドMYSQL_TYPE_GEOMETRY
空間フィールド MYSQL_TYPE_NULL
NULL
型フィールドMYSQL_TYPE_TIME2
、MYSQL_TYPE_DATETIME2
、およびMYSQL_TYPE_TIMESTAMP2
タイプコードはサーバー側でのみ使用されます。クライアントは、MYSQL_TYPE_TIME
、MYSQL_TYPE_DATETIME
、およびMYSQL_TYPE_TIMESTAMP
コードを参照します。IS_NUM()
マクロを使用して、フィールドが数値型を持つかどうかをテストできます。type
値をIS_NUM()
に渡すと、それはフィールドが数値である場合、TRUE と評価します。if (IS_NUM(field->type)) printf("Field is numeric\n");
ENUM
およびSET
値は文字列として返されます。これらについては、type
値がMYSQL_TYPE_STRING
で、flags
値にENUM_FLAG
またはSET_FLAG
フラグが設定されていることを確認します。