• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 서비스
    • MySQL유지보수
    • MySQL라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.1 한글메뉴얼) [close]
  • 1. MySQL 5.1 Reference Manual
  • 2. Installing and MySQL 업그레이드하기
  • 3. 사용 설명서 (Tutorial)
  • 4. MySQL 프로그램 사용하기
  • 5. 데이터베이스 관리
  • 6. 리플리케이션
  • 7. 최적화 (Optimization)
  • 8. 클라이언트 및 유틸리티 프로그램
  • 9. 언어 구조 (Language Structure)
  • 10. 문자 셋 지원
  • 24. API 및 라이브러리
  • 1. libmysqld, 임베디드 MySQL 서버 라이브러리
    2. MySQL C API
    1. C API 데이터 타입
    2. C API 함수 개요
    3. C API 함수 상세 내용
    4. C API 프리페어드 명령문
    5. C API 프리페어드 명령문 데이터 타입
    6. C API 프리페어드 명령문 함수 개요
    7. C API 프리페어드 명령문 함수 상세 내용
    8. C API 프리페어드 명령문의 문제점
    9. C API 멀티 명령문 실행
    10. C API 데이터 및 타입 값 처리
    11. C API 쓰레드 함수 상세 내역
    12. C API 임베디드 서버 함수 상세 내역
    13. 자동 재 접속 동작 제어
    14. C API를 사용할 때 자주 발생하는 문제점
    15. 클라이언트 프로그램 구축하기
    16. 쓰레디드 클라이언트 만들기
    3. MySQL PHP API
    4. MySQL Perl API
    5. MySQL C++ API
    6. MySQL Python API
    7. MySQL Tcl API
    8. MySQL Eiffel Wrapper
    9. MySQL프로그램 개발 유틸리티
  • 25. Connectors

24.2.1. C API 데이터 타입

  • MYSQL

이 구조는 데이터베이스에 대한 연결을 한 개 처리하는 것을 나타낸다. 거의 모든 MySQL 함수들이 이것을 사용한다. MYSQL 구조에 대한 복사는 시도하지 말도록 한다. 복사본이 제대로 사용될 수 있을지는 보장할 수 없다.

  • MYSQL_RES

이 구조는 열을 리턴하는 쿼리의 결과를 나타낸다 (SELECT, SHOW, DESCRIBE, EXPLAIN). 쿼리가 리턴하는 정보를 결과 셋 (result set)이라고 한다.

  • MYSQL_ROW

이것은 데이터의 하나의 열에 대한 타입-세이프 (type-safe) 표현 방식이다. 이것은 현재 바이트 스트링으로 카운팅된 어레이 방식으로 구현된다. (이와 같은 값의 내부에는 널 값이 들어 있을 수도 있기 때문에 필드 값에 바이너리 데이터가 들어 있다고 하더라도 이것을 널-터미네이티드 (null-terminated) 스트링으로 처리할 수 없다.) mysql_fetch_row()를 호출하면 열을 얻을 수가 있다.

  • MYSQL_FIELD

이 구조는 필드 이름, 타입, 그리고 크기와 같은 필드 정보를 가지고 있다. mysql_fetch_field()를 반복적으로 호출하면 각 필드에 대한 MYSQL_FIELD 구조를 얻을 수 있다.

  • MYSQL_FIELD_OFFSET

이것은 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));

  • my_bool

논리 타입. 진실 (0이 아닌 값) 또는 거짓 (0).

                 MYSQL_FIELD 구조에는 아래와 같은 것들을 포함되어 있다:

  • char * name

널-터미네이티드 스트링 형태의 필드 이름. 필드에 AS 구문이 들어 있는 별칭 (alias)을 사용한다면, name 값은 별칭이 된다.

  • char * org_name

널-터미네이티드 스트링 형태의 필드 이름. 별칭은 무시된다.

  • char * table

이 필드가 계산된 필드 (calculated field)가 아닐 경우 이것을 가지고 있는 테이블의 이름. 이것이 계산된 필드라면, table 값은 빈 스트링(empty string)이 된다. 뷰로 컬럼을 선택했다면, table 이름은 뷰가 된다. 테이블 또는 뷰가 AS 구문을 사용한 별칭이라면, table 값은 별칭이 된다.

  • char * org_table

널-터미네이티드 스트링 형태의 테이블 이름. 별칭은 무시된다. 뷰를 통해서 컬럼을 선택했다면, org_table은 언더라잉 테이블 (underlying table) 이름이 된다.

  • char * db

필드가 나오는 데이터베이스 이름이며, 널-터미네이티드 스트링 형태이다. 필드가 계산된 필드라면, db는 빈 스트링이 된다.

  • char * catalog

카탈로그 이름. 이 값은 항상 "def"이다.

  • char * def

이 필드의 디폴트 값이며, 널-테미네이티드 스트링 형태이다. 이것은 mysql_list_fields()를 사용하는 경우에만 설정한다.

  • unsigned long length

필드의 폭 (width). 이것은 바이트 단위의 출력 길이 (display length)에 해당한다.

  • unsigned long max_length

결과 셋에 대한 필드의 최대 폭 (결과 셋에 실제로 들어 있는 열 중의 최대 길이 필드 값에 해당하는 바이트 단위 길이). mysql_store_result() 또는 mysql_list_fields()를 사용한다면, 이것은 필드용 최대 길이를 가진다. mysql_use_result()를 사용한다면, 이 값은 0이 된다.

max_length 값은 결과 셋에 들어 있는 값의 스트링 표시 길이가 된다. 예를 들면, FLOAT 컬럼을 추출했을 때 “widest” 값이 -12.345라면,  max_length는 7이 된다 ('-12.345'의 길이).

  • 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

필드용 별도 비트-플래그 (bit-flag). flags 값은 0 또는 아래의 비트 셋 값보다 크다:

Flag Value

Flag Description

NOT_NULL_FLAG

Field can't be NULL

PRI_KEY_FLAG

Field is part of a primary key

UNIQUE_KEY_FLAG

Field is part of a unique key

MULTIPLE_KEY_FLAG

Field is part of a non-unique key

UNSIGNED_FLAG

Field has the UNSIGNED attribute

ZEROFILL_FLAG

Field has the ZEROFILL attribute

BINARY_FLAG

Field has the BINARY attribute

AUTO_INCREMENT_FLAG

Field has the AUTO_INCREMENT attribute

ENUM_FLAG

Field is an ENUM (deprecated)

SET_FLAG

Field is a SET (deprecated)

BLOB_FLAG

Field is a BLOB or TEXT (deprecated)

TIMESTAMP_FLAG

Field is a TIMESTAMP (deprecated)

   

BLOB_FLAG, ENUM_FLAG, SET_FLAG, 그리고 TIMESTAMP_FLAG 플래그는 더 이상 사용되지 않으며, MYSQL_TYPE_BLOB, MYSQL_TYPE_ENUM, MYSQL_TYPE_SET, 또는 MYSQL_TYPE_TIMESTAMP에 대해서는 field->type를 대신 사용한다.

아래의 예문은 flags 값을 사용하는 전형적인 방법을 보여 준다:

 

if (field->flags & NOT_NULL_FLAG)

    printf("Field can't be null\n");

 

flags 값에 대한 논리 (boolean) 상태를 결정할 때에는 다음과 같은 매크로를 사용할 수도 있다:

 

Flag Status

Description

IS_NOT_NULL(flags)

True if this field is defined as NOT NULL

IS_PRI_KEY(flags)

True if this field is a primary key

IS_BLOB(flags)

True if this field is a BLOB or TEXT (deprecated; test field->type instead)

  • unsigned int decimals

숫자 필드에 대한 10진수 숫자.

  • unsigned int charsetnr

필드에 대한 문자 셋 번호.

  • enum enum_field_types type

필드의 타입. type 값은 아래의 테이블에 나와 있는 MYSQL_TYPE_ 심볼 중의 하나가 된다:

Type Value

Type Description

MYSQL_TYPE_TINY

TINYINT field

MYSQL_TYPE_SHORT

SMALLINT field

MYSQL_TYPE_LONG

INTEGER field

MYSQL_TYPE_INT24

MEDIUMINT field

MYSQL_TYPE_LONGLONG

BIGINT field

MYSQL_TYPE_DECIMAL

DECIMAL or NUMERIC field

MYSQL_TYPE_NEWDECIMAL

Precision math DECIMAL or NUMERIC

MYSQL_TYPE_FLOAT

FLOAT field

MYSQL_TYPE_DOUBLE

DOUBLE or REAL field

MYSQL_TYPE_BIT

BIT field

MYSQL_TYPE_TIMESTAMP

TIMESTAMP field

MYSQL_TYPE_DATE

DATE field

MYSQL_TYPE_TIME

TIME field

MYSQL_TYPE_DATETIME

DATETIME field

MYSQL_TYPE_YEAR

YEAR field

MYSQL_TYPE_STRING

CHAR or BINARY field

MYSQL_TYPE_VAR_STRING

VARCHAR or VARBINARY field

MYSQL_TYPE_BLOB

BLOB or TEXT field (use max_length to determine the maximum length)

MYSQL_TYPE_SET

SET field

MYSQL_TYPE_ENUM

ENUM field

MYSQL_TYPE_GEOMETRY

Spatial field

MYSQL_TYPE_NULL

NULL-type field

 

필드에 숫자 타입이 있는지를 테스트하는 것은 IS_NUM() 매크로를 사용하면 된다.

type 값을 IS_NUM()에 전달하면, 필드가 숫자일 경우에 TRUE가 나온다:

 

if (IS_NUM(field->type))

    printf("Field is numeric\n");

 

스트링 데이터 타입에 대해서 바이너리와 비-바이너리 데이터를 구분하기 위해서는, charsetnr 값이 63인지 아닌지를 검사한다. 그 값이 63이라면, 문자 셋은 binary이다. 이것이 BINARY와 CHAR, VARBINARY와 VARCHAR, 그리고 BLOB와 TEXT를 구분하는 방법이다.

서울시 강남구 영동대로 602 6층  TEL: 02-6061-0006
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved