23.8.5 C API Data 구조
이 섹션에서는 준비된 문에 사용되는 것 이외의 C API 데이터 구조에 대해 설명합니다. 후자에 대한 자세한 내용은 섹션 23.8.9 "C API 준비된 문 데이터 구조" 를 참조하십시오.
MYSQL
이 구조는 하나의 데이터베이스 연결 핸들을 나타냅니다. 그것은 거의 모든 MySQL 함수에 사용됩니다.
MYSQL
구조의 사본을 만들려고하지 마십시오. 그와 같은 자료를 사용할 수 보장 할 수 없습니다.MYSQL_RES
이 구조는 행 (
SELECT
,SHOW
,DESCRIBE
,EXPLAIN
)을 반환하는 쿼리의 결과를 나타냅니다. 쿼리에서 반환되는 정보는이 섹션의 나머지 부분에서 결과 세트라고합니다.MYSQL_ROW
이것은 1 행의 데이터 형식이 안전한 표현입니다. 그것은 현재 계산되는 바이트 문자열의 배열로 구현되어 있습니다. (필드 값에 바이너리 데이터가 포함되어있을 가능성이있는 경우, 내부에서 그 값에 NULL 바이트가 저장 될 가능성이 있기 때문에 이들을 NULL로 끝나는 문자열로 취급 할 수 없습니다.) 라인
mysql_fetch_row()
를 호출하여 가져옵니다.MYSQL_FIELD
이 구조는 메타 데이터 (필드의 이름, 형태, 크기 등의 필드에 대한 정보)가 저장됩니다. 회원 정보는이 섹션의 나머지 분에 자세히 설명되어 있습니다.
mysql_fetch_field()
를 반복 호출하여 각 필드에 대한MYSQL_FIELD
구조를 얻을 수 있습니다. 필드 값은이 구조에 포함되지 않습니다. 그들은MYSQL_ROW
구조에 포함됩니다.MYSQL_FIELD_OFFSET
이것은 MySQL 필드 목록에 오프셋 타입 세이프 표현입니다. (
mysql_field_seek()
에서 사용됩니다.) 오프셋은 은행의 제로로부터 시작 필드 번호입니다.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));
my_bool
true (제로 이외) 또는 false (제로)의 값 boolean.
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()
를 사용하는 경우이 변수 값은 0입니다.max_length
값은 결과 집합의 값의 문자열 표현의 길이입니다. 예를 들어,FLOAT
컬럼을 검색하고 '최대 폭 "값이-12.345
인 경우max_length
7 ('-12.345'
의 길이)입니다.준비된 문을 사용하는 경우 바이너리 프로토콜에서는 값의 길이가 결과 집합의 값의 형태에 따라서 다르기 때문에
max_length
는 기본적으로 설정되지 않습니다. ( 섹션 23.8.9 "C API 준비된 문 데이터 구조" 를 참조하십시오.) 어쨌든max_length
값이 필요한 경우mysql_stmt_attr_set()
에서STMT_ATTR_UPDATE_MAX_LENGTH
옵션을 사용하면mysql_stmt_store_result()
를 호출 할 때 그 길이 이 설정됩니다. ( 섹션 23.8.11.3 "mysql_stmt_attr_set ()" 및 섹션 23.8.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
값 boolean 상태를 확인할 수 있습니다.플래그의 상태 설명 IS_NOT_NULL(flags)
이 필드가 NOT NULL
로 정의되어있는 경우는 trueIS_PRI_KEY(flags)
이 필드가 기본 키인 경우는 true IS_BLOB(flags)
이 필드가 BLOB
또는TEXT
(비추천 대신에field->type
을 테스트합니다)의 경우는 trueunsigned 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
플래그가 설정되어 있는지 확인합니다.