この構造体は、1 つのデータベース接続へのハンドルを表す。ほとんどの MySQL 関数で使用される。
この構造体は、レコードを返すクエリ(SELECT
、SHOW
、EXPLAIN
、DESCRIBE
)の結果を表す。このセクションでは、クエリから返された情報を結果セットと呼ぶ。
1
行のデータのタイプセーフな表現。現在は、バイト文字列の配列として実装されている(フィールドにはバイナリデータが格納される場合があり、そのようなデータでは内部的にヌルバイトが使用される可能性があるので、バイト文字列をヌル終端文字列として扱うことはできない)。レコードを取得するには、mysql_fetch_row()
を呼び出す。
この構造体には、フィールドの名前、型、サイズなど、フィールドに関する情報が格納される。メンバの詳細については、以下で説明する。
各フィールドに対して
mysql_fetch_field()
を繰り返し呼び出すことによって、対応する
MYSQL_FIELD
構造体を取得できる。フィールド値はこの構造体の一部ではなく、MYSQL_ROW
構造体に含まれる。
MySQL
フィールド一覧に対するオフセットの安全な型表現(mysql_field_seek()
が使用)。オフセットはレコード内部でのフィールド番号であり、0
から始まる。
my_ulonglong
レコードの数を表すための型であり、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));
MYSQL_FIELD
構造体のメンバを以下に示します。
char * name
フィールドの名前。ヌル終端文字列。
char * table
このフィールドが計算結果データのフィールドでない場合、このフィールドが属するテーブルの名前。計算結果データのフィールドの場合、table
の値は空文字列になる。
char * def
このフィールドのデフォルト値。ヌル終端文字列。mysql_list_fields()
を使用するときだけ設定される。
enum enum_field_types type
フィールドの型。 type
の値は次のいずれかになる。
型の値 | 型の説明 |
FIELD_TYPE_TINY |
TINYINT フィールド |
FIELD_TYPE_SHORT |
SMALLINT フィールド |
FIELD_TYPE_LONG |
INTEGER フィールド |
FIELD_TYPE_INT24 |
MEDIUMINT フィールド |
FIELD_TYPE_LONGLONG |
BIGINT フィールド |
FIELD_TYPE_DECIMAL |
DECIMAL または NUMERIC
フィールド |
FIELD_TYPE_FLOAT |
FLOAT フィールド |
FIELD_TYPE_DOUBLE |
DOUBLE または REAL
フィールド |
FIELD_TYPE_TIMESTAMP |
TIMESTAMP フィールド |
FIELD_TYPE_DATE |
DATE フィールド |
FIELD_TYPE_TIME |
TIME フィールド |
FIELD_TYPE_DATETIME |
DATETIME フィールド |
FIELD_TYPE_YEAR |
YEAR フィールド |
FIELD_TYPE_STRING |
CHAR フィールド |
FIELD_TYPE_VAR_STRING |
VARCHAR フィールド |
FIELD_TYPE_BLOB |
BLOB または TEXT
フィールド(max_length
を使用して最大長を決定) |
FIELD_TYPE_SET |
SET フィールド |
FIELD_TYPE_ENUM |
ENUM フィールド |
FIELD_TYPE_NULL |
NULL 型フィールド |
FIELD_TYPE_CHAR |
廃止(代わりに FIELD_TYPE_TINY
を使用すること) |
IS_NUM()
マクロを使用すると、フィールドが数値型かどうかを調べることができる。type
の値を IS_NUM()
に渡すと、フィールドが数値型の場合は TRUE
と評価される。
if (IS_NUM(field->type)) printf("Field is numeric\n");
unsigned int length
フィールドの幅。テーブル定義で指定された値に従う。
unsigned int max_length
結果セットのフィールドの最大幅(結果セットに実際に存在するレコードのフィールド値の最大長)。mysql_store_result()
または mysql_list_fields()
を使用した場合、この値はフィールドの最大長を表す。mysql_use_result()
を使用した場合、この値は 0 になる。
unsigned int flags
フィールドのさまざまな状態を表すビットフラグ。flags
値は、0 または以下のビットが 1
つ以上設定された値になる。
フラグの値 | フラグの説明 |
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 型のフィールド(廃止) |
BLOB_FLAG
、ENUM_FLAG
、SET_FLAG
、および
TIMESTAMP_FLAG
の各フラグは、フィールドの属性ではなく型を示しているので、廃止されている。代わりに、field->type
を
FIELD_TYPE_BLOB
、FIELD_TYPE_ENUM
、FIELD_TYPE_SET
、または
FIELD_TYPE_TIMESTAMP
と比較する方が望ましい。
次に、flags
値の典型的な使用例を示す。
if (field->flags & NOT_NULL_FLAG) printf("Field can't be null\n");
以下のマクロを使用すると、flags
値を調べてブール値で結果を得ることができる。
フラグの状態 | 説明 |
IS_NOT_NULL(flags) |
このフィールドが NOT NULL
として定義されている場合は True。 |
IS_PRI_KEY(flags) |
このフィールドが主キーの場合は True。 |
IS_BLOB(flags) |
このフィールドが BLOB または
TEXT の場合は True
(廃止。代わりに
field->type
による比較を推奨)。 |
unsigned int decimals
数値フィールドの小数部桁数。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.