この構造は1データベース接続に対するハンドルを表します。それは殆ど全てのMySQL機能に対して使われます。MYSQL
構造のコピーを作ろうとすべきではありません。このようなコピーが使用可能である保証はありません。
この構造は横列(SELECT
、SHOW
、DESCRIBE
、EXPLAIN
)を戻すクエリーの結果を表します。クエリーから返された情報はこのセクションの残りの部分の中で結果セットと呼ばれます。
これはデータの1本の横列に関して、タイプに安全な表現です。それは現在カウントされたバイトストリングのアレーとして搭載されています。(フィールド値にバイナリーデータが含まれている場合、内部に無効なバイトが含まれている恐れがあるので、これらをゼロで終わるストリングとして扱うことはできません。)横列は 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));
(ゼロでない)真または(ゼロの)虚の値に対するブーリアンタイプ。
MYSQL_FIELD
構造には、ここで列記したメンバーが含まれています:
char * name
ゼロで終わるストリングを含むフィールドの名称。フィールドに
AS
クローズを含むアリアスを附与すると、name
はアリアスとなります。
char * org_name
ゼロで終わるストリングを含むフィールドの名称。アリアスは無視されます。
char * table
それが計算フィールドでない場合、このフィールドを含むテーブルの名称。計算されたフィールドの場合、table
値は空のストリングとなります。カラムが画面から選択される場合、table
は画面を指定します。テーブルあるいは画面に
AS
クローズを使ってエイリアスを附与すると、table
の値はエイリアスとなります。
char * org_table
ゼロで終わるストリングを含むテーブルの名称。エイリアスは無視されます。カラムを画面から選ぶと、org_table
が基盤となるテーブルを指定します。
char * db
ゼロで終わるストリングとして、フィールドを生むデータベースの名称。フィールドが計算フィールドである場合、db
は空のストリングとなります。
char * catalog
カタログ名。この価値は常に
"def"
となります。
char * def
ゼロで終わるストリングを含むこのフィールドのデフォルト値。mysql_list_fields()
を使う場合に限り、これはセットされます。
unsigned long length
テーブルの定義に規定したフィールドの幅。
unsigned long max_length
結果セットに対するフィールドの最大幅(結果セット中に実在する列に対する最長フィールド値の長さ)。mysql_store_result()
あるいは mysql_list_fields()
を使う場合、これにはフィールドに対する最大長さが含まれます。mysql_use_result()
を使うと、この変数の値はゼロになります。
max_length
の値は、結果セット中の値のストリング表示の長さとなります。例えば、FLOAT
カラムを復元する場合にあって、「widest」値が-12.345
ある場合、max_length
は('-12.345'
の長さに等しい)7となります。
準備されたステートメントを使っている場合、バイナリのプロトコルに対して、値の長さは結果セット中の値のタイプによって変わるので、max_length
は初期設定されません。(項23.2.5. 「準備されたC APIステートメントデータタイプ」を参照してください。)max_length
値がとにかく欲しい場合、mysql_stmt_attr_set()
を使って、STMT_ATTR_UPDATE_MAX_LENGTH
オプションを有効化すると、mysql_stmt_store_result()
を呼び出す時、その長さがセットされます。(項23.2.7.3. 「mysql_stmt_attr_set()
」と項23.2.7.27. 「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 (deprecated)です |
SET_FLAG |
フィールドはSET (deprecated)です |
BLOB_FLAG |
フィールドはBLOB またはTEXT
(deprecated)です |
TIMESTAMP_FLAG |
フィールドはTIMESTAMP (deprecated)です |
BLOB_FLAG
フラグ、ENUM_FLAG
フラグ、SET_FLAG
フラグおよびTIMESTAMP_FLAG
フラグの使用は、それらはそのタイプではなく、フィールドのタイプを表示するので、けなされます。field->type
を、MYSQL_TYPE_BLOB
、MYSQL_TYPE_ENUM
、MYSQL_TYPE_SET
もしくは代わりにMYSQL_TYPE_TIMESTAMP
に対して出来るだけテストしてください。
次の例はflags
値の典型的な利用を図解したものです:
if (field->flags & NOT_NULL_FLAG) printf("Field can't be null\n");
flags
値のブーリアン・ステータス決定するため、次の便利なマクロを使うことができます:
フラグのステータス | 摘要 |
IS_NOT_NULL(フラグ) |
このフィールドがNOT NULL
|
IS_PRI_KEY(フラグ) であると規定されている場合、真 |
このフィールドがプライマリーキーである場合、真 |
IS_BLOB(フラグ)
であると規定されている場合、真 |
このフィールドがBLOB またはTEXT
(deprecated; test field->type
instead)である場合、真 |
unsigned int decimals
数値フィールドに対する小数の数。
unsigned int charsetnr
フィールドに対するキャラクター・セットナンバー。
enum enum_field_types タイプ
フィールドのタイプ。type
値は次のテーブルに示すMYSQL_TYPE_
シンボルの1つにすることができます。
タイプの値 | タイプの説明 |
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 or 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 or TEXT フィールド
(大長を決めるためにmax_length を使用) |
MYSQL_TYPE_SET |
SET フィールド |
MYSQL_TYPE_ENUM |
ENUM フィールド |
MYSQL_TYPE_GEOMETRY |
空間フィールド |
MYSQL_TYPE_NULL |
NULL -type field |
フィールドが数値のタイプを持っているかどうか試すためにIS_NUM()
マクロを使うことができます。type
値をIS_NUM()
に渡しください。そうすると、フィールドが数値である場合、それが真であると判定します。
if (IS_NUM(field->type)) printf("Field is numeric\n");
ストリングデータタイプに対して、バイナリーデータであるか、非バイナリーデータであるかを区別するには、charsetnr
値が63であるかどうか調べてください。もしそうであるなら、キャラクターセットはbinary
で、それは非バイナリーデータでなくバイナリーデータであることを示します。これが、BINARY
とCHAR
、VARBINARY
とVARCHAR
並びにBLOB
とTEXT
.を区別する方法です。