この構造は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.を区別する方法です。
