MariaDB 또는 MySQL에서 사용하는 Data type 정리

마지막 업데이트: 2022년 6월 1일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

오늘도 난, 하하하

[UNIX / Linux] 특수 권한(setuid, setgid, sticky bit)

- UNIX 시스템에서는 프로세스에 다섯 가지 번호 부여

1. 프로세스에 부여되는 번호들

2) 실제 사용자 ID(RUID)

3) 유효 사용자 ID(EUID)

4) 실제 사용자 그룹(RGID)

5) 유효 사용자 그룹 ID(EGID)

- 계정 관리에 사용: RUID, RGID

- 접근 권한 결정에 사용: EUID, EGID (보안에 주의)

- 일반적으로 실제 번호와 유효 번호는 동일함

시스템에서 사용자가 명령 실행 시 명령어를 찾는 경로와 절차

- 권한 관리 명령 chmod, umask, 소유주 변경 명령 chown, chgrp (이전 글 참조)

- 접근 권한은 8진수 또는 r(읽기권한, 4), w(쓰기권한, 2), x(실행권한, 1) 문자로 표현 가능

- 8진수로 표현할 때는 권한의 합으로 표시함(예- 읽기+쓰기권한 6, 읽기+실행 권한 5 등)

- 8진수 3자리(3bit)로 소유자, 그룹 소유자, 기타 사용자를 위한 파일 모드를 설정

- 접근 권한을 755로 표현하는 것과 0755로 표현하는 것은 동일한 표현, 네 자리가 되지 않는 표현은 앞에 0이 생략됨

- UNIX 시스템은 파일에 대한 접근 권한 및 파일 종류를 나타내기 위해 16bit를 사용한다.

- 각 3bit씩 총 9bit는 소유자 접근권한(user), 그룹 소유자 접근권한(group), 기타 사용자 접근권한(other)의 권한을 기술하는데 사용

- 4bit는 파일의 종류 표현에 사용

그룹 소유자 접근권한

기타 사용자 접근 권한

- setuid 비트: 8진수 4000

- setuid 비트를 실행 파일에 적용하면 실 사용자(프로그램을 실제 실행 중인 사용자)에서 프로그램 소유자의 ID로 유효사용자(EUID)가 변경됨

1. setuid 비트를 설정하여 사용하는 경우

- 슈퍼유저 root만 접근할 수 있는 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 기능상 필요한 경우

(setuid 비트가 설정된 파일은 실행순간만 그 파일의 소유자 권한으로 실행,

실행 순간만 권한을 빌려온다라고 이해하면 쉬움)

- 매번 슈퍼유저 root가 어떤 행위를 해주지 않아도 되고, 일반 사용자에게 root권한을 주지 않아도 되기때문에 setuid 비트를 적용하는 것이 시스템 운영면에서 효율적

- 대부분 슈퍼유저가 소유한 소수 프로그램들에만 주어짐, 일반 사용자가 그 프로그램을 실행하면 setuid root가 되고,

슈퍼유저의 유효한 특권들을 가지고 실행되기때문에 일반 사용자의 접근이 금지된 파일과 디렉토리들에 접근 가능하게끔

2. setuid 비트 설정 시 보안 취약점

- root권한이 필요없는 프로그램에 소유주가 root로 되어 있고 setuid가 설정된 경우는 보안상으로 매우 취약

- 일반 사용자로 접근하는 경우도 setuid 설정으로 실행 가능해지기 때문이다.

- 권한 상승 우려때문에 setuid 프로그램의 수는 반드시 최소화해야 함

3. setuid 비트 설정 방법

- 8진수(4000)나 기호(u+s)를 이용하여 setuid 비트를 설정할 수 있음(setuid 비트 설정 제거 u-s)

- 권한 변경을 위해 chmod 명령어를 이용함

- setuid 비트가 설정되어 있으면 사용자 접근권한의 실행 권한 자리에 실행 권한이 있으면 소문자 s로 실행권한이 없으면 대문자 S로 표시됨

4. setuid 비트 설정의 활용

1) 패스워드 설정, 변경시 사용

- 패스워드 지정, 변경에 사용하는 /usr/bin/passwd MariaDB 또는 MySQL에서 사용하는 Data type 정리 명령의 경우 setuid 비트가 설정 되어 있음(접근권한: 4755)

- passwd 명령어(파일)로 패스워드 지정, 변경 시 /etc/passwd, /etc/shadow파일이 변경됨

- /etc/passwd의 접근권한: 0644 (슈퍼유저 root만 수정 가능)

- /etc/shadow의 접근권한: 0640 (슈퍼유저 root만 수정 가능)

- passwd 명령어(파일)은 setuid 비트가 설정되어 있으므로 실행 시 소유자인 root의 권한으로 실행됨

- 일반 사용자 계정에서 passwd 명령어 실행 시에 소유자 root 권한으로 실행되기댸문에 슈퍼유저 root만 수정가능한 /etc/passwd, /etc/shadow 파일의 수정이 가능해 짐

2) 일반 사용자가 읽을 수 없는 파일 읽기

- 설명을 위해 예제를 만든 것이기 때문에 조금 억지스러운 부분이 있을 수 있음

- /bin/cat 파일에 직접 setuid비트를 설정하지 않고 심볼릭 링크를 만들어 심볼릭링크 파일에 setuid 비트 설정,

해제 시에도 심볼릭링크 파일에 해제

- setgid 비트: 8진수 2000

- setuid 비트처럼 유효 그룹 ID(EGID)를 사용자의 실제 그룹 ID에서 파일 소유자의 그룹 ID로 변경함

- setgid 비트가 디렉토리에 설정되어 있으면, 이 디렉토리에 새로 설정된 파일들은 디렉토리 그룹 소유권 보다 파일 생성자의 그룹 소유권을 얻게 될 것

- 일반 파일 그룹의 멤버가 파일 소유자의 그룹과 상관없이 디렉토리 내의 모든 파일에 접근이 필요한 공유 디렉토리에 유용

1. setgid 비트 설정방법

- 8진수(2xxx)나 기호(g+s)를 이용하여 setuid 비트를 설정할 수 있음(setgid 비트 설정 제거 g-s)

- 권한 변경을 위해 chmod 명령어를 이용함

- setgid 비트가 설정되어 있으면 그룹 소유자 접근 권한의 실행 권한 자리에 실행 권한이 있으면 소문자 s로 실행권한이 없으면 대문자 S로 표시됨

2. setgid 비트 설정의 활용

1) 사용자 계정 생성시 mail spool 파일 생성

- 사용자 계정 생성시 옵션에 따라 /var/mail 디렉토리 하위에 생성하는 사용자 계정명과 동일명으로 mail spool 파일 생성

- /var/mail 디렉토리에 setgid 비트가 설정되어 있음, 하위에 생성되는 mail spool 파일의 그룹 소유주가 mail이 됨

- sticky 비트: 8진수 1000

- 리눅스는 파일의 sticky bit는 무시

- sticky 비트는 특정 디렉토리를 누구나 자유롭세 사용 할 수 있게 하기 위함 (공용 디렉토리에 사용)

- 단, sticky 비트가 디렉토리에 적용되면 디렉토리 소유자나 파일 소유자 또는 슈퍼유저가 아닌 사용자들은 파일을 삭제하거나 이름을 변경하지 못하도록 막음, 파일 또는 디렉토리 생성은 누구나 할 수 있음

- sticky 비트를 공유모드라고도 함

1. sticky 비트 설정방법 및 활용

- 8진수(1xxx)나 기호(o+t 또는 u+t)를 이용하여 sticky 비트를 설정할 수 있음(sticky 비트 설정 제거 o-t 또는 u-t)

- 리눅스의 경우 o+t, 유닉스(솔라리스)의 경우는 u+t로 설정

- 권한 변경을 위해 chmod 명령어를 이용함

- sticky 비트가 설정되어 있으면 기타 사용자 접근 권한의 실행 권한 자리에 실행 권한이 있으면 소문자 t로 실행권한이 없으면 대문자 T로 표시됨

- /tmp 디렉토리 처럼 공용 디렉토리 접근에 활용

- 특수권한 비트가 설정되어 있을떄 접근권한을 이용한 find 명령으로 파일을 검색을 할 수 있음

- 파일 검색 find 명령에 대한 참조(이전 글 참조)

1. 특수권한 비트 설정 파일검색 시 명령문 형식

- find [파일을 검색할 디렉토리 경로] -perm [접근권한] [-ls]

1) 파일을 검색할 디렉토리 경로는 생략 가능

- 절대경로로 지정하면 결과도 절대경로로 출력, 상대경로로 지정시 결과도 상대경로로 출력

- 생략 시 현재 디렉토리가 기준

-ls 시 검색 결과를 대상으로 ls 명령을 수행한 결과로 보여줌

2. 특수권한 비트 설정 파일검색 예제

'보안 > System' 카테고리의 다른 글

[UNIX / Linux] 특수 권한(setuid, setgid, sticky bit) (18) 2015.06.27
[UNIX / Linux] 시스템 시작과 종료 (0) 2015.05.10
[UNIX / Linux] 프로세스 응용 (0) 2015.05.10
[UNIX / Linux] 디렉토리 및 파일 관련 명령어 (1) 2015.05.02
[UNIX / Linux] 파일 검색(find) (0) 2015.05.02
[UNIX / Linux] 권한 관리(chmod, chown, chgrp, umask) (13) 2015.04.30
[UNIX / Linux] 디렉토리 관리 (5) 2015.MariaDB 또는 MySQL에서 사용하는 Data type 정리 04.29
[UNIX / Linux] 특수 문자(Shell Metacharacter) (0) 2015.04.28
[UNIX / Linux] 파일링크(ln) (0) 2015.04.27
[UNIX / Linux] 입출력 재지정, 파이프 (1) 2015.04.26

안녕하세요. 글 잘 봤습니다.
한 가지 궁금한게 있어서요.

/usr/bin/su 파일에 other 권한을 0(Octal)로 주면 아무리 setuid 설정되어있어도 권한이 없다고 나옵니다. 위에 글을 보면 setuid가 마치 권한이 '없는'사용자가 setuid나 setgid가 설정되어있는경우 그 권한이 effective권한이 되어 실행된단느 내용으로 보여집니다.

하지만 그럴경우 두가지 의문점이 생깁니다.

1. 권한이 없는 사용자가 suid/guid로 실행이 된다고 했는데, owner:group아닌 other 사용자가 suid/guid가 설정되어있는 파일을 실행하고자 할때 실행이 안되는 이유는 먼가요?

2. owner도 group에도 포함되어있지 않은 other 사용자가 suid/guid가 동시에 설정되어있는 경우 suid,guid중 어느 것으로 실행이 되는건가요?

답변 부탁드립니다 ㅜㅜ 감사합니다.

네. 안녕하세요^^
부족한 글에 질문 주신 것을 살펴보았습니다만..
질문에 대한 답변을 드리려면..
질문의 상황에서 사용한 명령, 파일의 접근 권한을 어떻게 설정하셨는지
파일 접근 권한을 기호나 8진수로 기입해서 적어 주셔야
정확한 답변을 드릴 수 있을 것 같습니다.

지금 질문에서 답변을 드리기에는 애매한 부분이 있는 것 같습니다..
추가로 요청 드리는 이유는..
예제를 보통 인위적인 상황을 만들어서 실습해보기 때문에
올바르게 접근 권한을 설정해도 안되는 건지 아니면 실습 상황을 만들면서 잘못 적용한 부분이 있는지를 확인하기 위함입니다.
물론 저도 혼자 공부하고 이해하고 정리한 내용은 답변을 드릴 실력은 안되지만;;
구체적으로 댓글 남겨주시면 제가 아는한 답변 드리도록 하겠습니다.

안녕하세요~ 궁금한 점이 있는데
특정 디렉토리 속성을 selinux에서 웹서버가 접근을 허용하도록 설정하려면 어떻게 해야하나요?

이건 제가 정확한 답을 드릴 수 없을 것 같아서 답변 드리지 않겠습니다.
제 MariaDB 또는 MySQL에서 사용하는 Data type 정리 답변이 가이드에 맞는 답변인지 증명이 안되서요.
추측성 답변을 드릴수는 없으니까요.
다른 사이트를 검색해보시는게 좋을 것 같네요.

와 정말 잘 설명해주셨네요. 덕분에 고민해결 ㅠㅠ 감사합니다.

안녕하세요,
Sticky-bit 제거 하려고 구글링하다가 들어왔는데. 수정할 내용이 있네요ㅡ

특수권환은 3bit라고 적으두시고, 표현을 4bit로 표현되어 있습니다.
잘아시겠지만,

파일 종류 및 접근 권환을 나타내기 위해 총 16 bit로 표현합니다.
파일종류: 4bit로 표현 + 특수권환: 3bit로 표현 + 유저: 3bit로 표현 + 그룹: 3bit로 표현 + other: 3bit로 표현

추가 내용:
혹시나, 8진수의 표현 범위는 000에서 111까지 입니다.

다시 한 번 보니,
제가 오해 한 것 같네요ㅡ

stick-bit: 8진수(1000)이렇게 적은 것을 보고, 작성 한 글인데.
이표현을 천천히 다시 보니

1이 stik-bit의 8진수 표현 즉, 001이고 뒤에 000은 유저/그룹/아더 에 대한 각 000,000,000 이군요ㅡ
초보자 분들이 보기 좋은 자료 같은데. 좀 헷갈릴수 있겠구나 싶네요.

설명 너무 잘해주셔서 감사합니다!

설명 너무 잘해주셔서 감사합니다!

아이고~~ 부족한 글에 도움을 받고 계시다니 고맙습니다^^ 네 저는 맥북을 사용하는데요.패러럴즈로 칼리리눅스 설치해서 맥북 터미널에서 ssh로 연결해서 실습을 합니다. 제 MariaDB 또는 MySQL에서 사용하는 Data type 정리 환경이 이런거구요. 그냥 리눅스 터미널 툴을 캡쳐해서 이미지 편집툴에다가 하나하나 그리고 쓰고 한다고 생각하시면 될것 같아요. 공부하다가 개념에 맞는 예제 같은걸 만들어서 정리해놓으면 까먹어도 나중에 보기 좋아서 저렇게 했었습니다. 요새는 통 생산하는것이 없지만요. 답변이 되셨을지 모르겠네요~~

사족남깁니다. 좋은 글이네요..
제일 처음 부분 "시스템에서 사용자가 명령 실행 시 명령어를 찾는 경로와 절차"
부분에 "현재 디렉토리 확인" 부분이 있는데, 현재 디렉토리는 반드시 확인하는 게
아닙니다. $PATH에 잡혀 있어야 확인하고 그것도 제일 처음에 있어야 확인을 하죠..

현재 디렉토리가 $PATH에 잡혀 있지 않으면 현재 디렉토리에서 무엇을
실행시키려면 명시적으로 ./ 를 명령어 이름 앞에 붙여야
합니다.

[email protected]:~$ ls -l test.sh
-rwxrwxr-x 1 sylee sylee 39 2월 1 08:59 test.sh*
[email protected]:~$ ./test.sh
this is the test.
[email protected]:~$ test.sh
test.sh: 명령을 찾을 수 없습니다
[email protected]:~$ echo $PATH
/home/sylee/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
[email protected]:~$

범위 바이너리 옵션 타입

관계형 데이터 베이스에서 처리하는 데이터 타입은 C, Python, Java와 같은 프로그래밍 언어의 데이터 타입보다 세부적으로 정의되어 있습니다. Maria DB에서 정의하는 데이터 타입은 아래와 같습니다.

  1. Numeric Data Type
  2. String Data Types
  3. Date & Time Data Types
  4. Other Data Types: Geometry Types

1. Numeric Data Types

Numeric Data Type은 숫자를 표현합니다. 프로그래밍 언어의 Integer, Float, Double형과 동일합니다. TinyInt는 1 Byte, SmallInt는 2 Byte, Medium Int는 3 Byte, Int는 4 Byte로 표현됩니다. 소수점 실수의 정밀도에 따라서 Float과 Double으로 표현되고, Bit(m)는 m자리수의 Bit를 표현합니다.

데이터 타입 의미 크기 설명
TINYINT 매우 작은 정수 1 byte -128 ~ 127 ( 부호없이 0 ~ 255)
BOOLEAN Synonym for TINYINT(1) A value of zero is considered false. Non-zero values are considered true.
INT1 Synonym for TINYINT
SMALLINT 작은 정수 2 byte The signed range is -32768 to 32767. The unsigned range is 0 to 655
INT2 Synonym for SMALLINT
MEDIUMINT 중간 크기의 정수 3 byte The signed range is -8388608 to 8388607. The unsigned range is 0 to 16777215.
INT3 Synonym for MEDIUMINT
INT 표준 정수 4 byte When marked UNSIGNED, it ranges from 0 to 4294967295, otherwise its range is -2147483648 to 2147483647 (SIGNED is the default).
INT4 Synonym for INT
BIGINT 큰 정수 8 byte The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.
INT8 Synonym for BIGINT
DECIMAL(M,D) DEC, NUMERIC, FIXED
고정 소수
m과 n에 따라 다르다 The maximum number of digits (M) for DECIMAL is 65.
The maximum number MariaDB 또는 MySQL에서 사용하는 Data type 정리 of supported decimals (D) is 30
FLOAT(M,D) Sinlge precision Float-point Number 4 byte -3.402823466E+38 to -1.175494351E-38
0
1.175494351E-38 to 3.402823466E+38
DOUBLE(M,D) Double precision Float-point Number 8 byte -1.7976931348623157E+308 to -2.2250738585072014E-308
0
2.2250738585072014E-308 to 1.7976931348623157E+30
BIT(M) 비트 필드 m 에 따라 다르다 M indicates the number of bits per value, from 1 to 64

2. String Data Types

String Data Type은 문자열과 Binary 데이터를 표현합니다. 문자열을 표시하기 위한 Char, Text가 있고, 이진 파일을 표시하기 위한 Binary, Blob이 있습니다.

MariaDB 또는 MySQL에서 사용하는 Data type 정리
데이터 타입 의미 설명 (예제)
String Literals ""로 표현된 문자열 'The MariaDB String'
CHAR(M) A fixed-length string c CHAR(10)
VARCHAR(M) A variable-length string. M represents the maximum column length in characters. VARCHART (30) CHARACTER SET utf8
BINARY(M) The BINARY type is similar to the CHAR type, but stores binary byte strings rather than non-binary character strings. M represents the column length in bytes. a BINARY(10)
VARBINARY(M) he VARBINARY type is similar to the VARCHAR type, but stores binary byte strings rather than non-binary character strings. M represents the maximum column length in bytes. CREATE TABLE varbins (a VARBINARY(10));
TINYBLOB A BLOB column with a maximum length of 255 (28 - 1) bytes. Each TINYBLOB value is stored using a one-byte length prefix that indicates the number of bytes in the value.
BLOB(M) Blob 데이터: A BLOB column with a maximum length of 65,535 (2^16 - 1) bytes. 최대크기 65,535 (2^16 - 1) bytes.
MEDIUMBLOB , 중간 크기 BLOB : A BLOB column with a maximum length of 16,777,215 (2^24 - 1) bytes. Each MEDIUMBLOB value is stored using a three-byte length prefix that indicates the number of bytes in the value.최대크기 16,777,215 (2^24 - 1) bytes
LONGBLOB 큰 BLOB: A BLOB column with a maximum length of 4,294,967,295 bytes or 4GB (232 - 1). 최대크기 4GB
TINYTEXT 최대 8 byte 문자열 A TEXT column with a maximum length of 255 (2^8 - 1) characters.
TEXT 최대 64kb 문자열 A TEXT column with a maximum length of 65,535 (216 - 1) characters.
MEDIUMTEXT 최대 16MB 문자열 A TEXT column with a maximum length of 16,777,215 (224 - 1) characters.
LONGTEXT 최대크기 4GB 문자열 A TEXT column with a maximum length of 4,294,967,295 or 4GB (232 - 1) characters. T
INET6 IPv6 address
(MariaDB 10.05 에서 신규 추가)
Values are stored as a 16-byte fixed length binary string, with most significant byte first.

Storage engines see INET6 as BINARY(16).

Clients see INET6 as CHAR(39) and get text representation on retrieval.

INSERT INTO t2 VALUES ('invalid');
ERROR 4025 (23000): CONSTRAINT `j` failed for `test`.`t2`

C 언어 코딩 도장

지금까지 오버플로우, 언더플로우와 자료형의 크기에 대해서 알아보았습니다. 이번에는 소스 코드에서 정수의 최솟값과 최댓값을 표현하는 방법을 알아보겠습니다.

유닛 맨 앞의 표 7‑1에서 부호 있는 int 의 최솟값은 -2,147,483,648이라고 했지만 Visual Studio에서 이 값을 직접 넣어보면 컴파일 에러가 발생합니다.따라서 소스 코드에서 정수의 최솟값을 표현하려면 limits.h 헤더 파일을 사용해야 합니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요(실행 결과는 Visual Studio, Windows 기준).

CHAR_MIN , SHRT_MIN , INT_MIN , LONG_MIN , LLONG_MIN 은 부호 있는 정수의 최솟값입니다. limits.h 헤더 파일에는 다음과 같이 부호 있는 정수와 부호 없는 정수의 최솟값과 최댓값이 정의되어 있습니다.

표 7‑3 정수 자료형의 최솟값과 최댓값

자료형 최솟값 최댓값
char CHAR_MIN CHAR_MAX
short SHRT_MIN SHRT_MAX
int INT_MIN INT_MAX
long LONG_MIN LONG_MAX
long long LLONG_MIN LLONG_MAX
unsigned char 0 UCHAR_MAX
unsigned short 0 USHRT_MAX
unsigned int 0 UINT_MAX
unsigned long 0 ULONG_MAX
unsigned long long 0 ULLONG_MAX

다음과 같이 limits.h 에 정의된 최댓값을 넘어서도 오버플로우가 발생합니다.

부호 있는 정수는 저장할 수 있는 범위를 넘어서면 최솟값(음수)부터 다시 시작하고, 부호 없는 정수는 범위를 넘어서면 최솟값인 0부터 다시 시작합니다.

마찬가지로 최솟값보다 작아지면 언더플로우가 발생합니다

최솟값에서 1을 빼서 값이 더 작아지면 언더플로우가 발생하여 다시 한 바퀴 돌게 되므로 최댓값이 출력됩니다.

지금까지 정수 자료형의 오버플로우와 언더플로우를 설명했습니다. 값을 계산하다가 오버플로우나 언더플로우 현상이 발생하면 의도치 않은 결과가 나올 수 있습니다. 따라서 프로그래밍할때는 정수 자료형의 크기를 항상 생각하고, 값이 범위를 넘어서지는 않는지 반드시 확인합니다.

게임을 개발하면서 몬스터를 스폰하는데 각 몬스터마다 겹치지 않는 ID가 필요하다고 치죠. 그래서 unsigned int 변수가 1씩 증가하면서 고유의 ID(유니크 ID)를 MariaDB 또는 MySQL에서 사용하는 Data type 정리 발급하는 함수를 만들었습니다. 언뜻 보기에는 잘 동작할 것 같지만 실제로는 문제가 있습니다. 시간이 오래 흘러 발급된 ID가 4,294,967,295을 넘어서면 오버플로우가 발생하여 0부터 다시 시작하게 됩니다. 이때부터는 ID가 중복되면서 여러 가지 문제가 발생할 것입니다.

오버플로우 문제는 당장 버그를 일으키지 않지만 언제 터질지 모르는 시한 폭탄과 같습니다. 즉, 오버플로우 상황이 발생하면 예상치 못한 버그가 발생하며 원인을 찾기가 매우 힘듭니다. 따라서 기능을 구현하기 전에 사용한 자료형이 적합한지 세심히 살펴봐야 합니다.

유튜브에서 싸이의 강남스타일 뮤직 비디오 조회수가 21억을 넘어서면서 음수로 표시된 적이 있었는데 이 사례도 정수 오버플로우 문제입니다.

범위 바이너리 옵션 타입

MYSQL

이 구조는 하나의 데이터베이스 커넥션을 다루는 방법을 나타낸다.

이것은 대부분 모든MySQL 함수에 사용된다.

사용자는 MYSQL 구조의 카피를 만들 필요가 없다. 이런 카피가 사용 가능하다는 보장이 없다.

MYSQL_RES

이 구조는 로우들을 리턴한 쿼리의 결과를 나타낸다 rows (SELECT, SHOW, DESCRIBE,EXPLAIN).

쿼리에서 리턴된 정보는 이 장의 나머지에 result set 로 호출된다.

MYSQL_ROW

이것은 데이터의 열 하나의 타입에 따라 나타난다.

이것은 일반적으로 계산되는 바이트 문자열(스트링)의 어레이로 실행된다.

(필드 값이 바이너리 데이터를 포함하고 있다면,이런 값들이 null 바이트를

내부적으로 포함하고 있기 때문에 사용자는 이것들을 null-terminated 문자열로 취급할 수 없다)

mysql_fetch_row()함수를 호출하여 로우들을 얻는다.

MYSQL_FIELD

이 구조는 필드 이름, 타입 사이즈 등과 같은 필드 정보를 포함하고 있다.

이 요소들이 여기에 자세히 기술되어 있다.

사용자는 각 필드에서 mysql_fetch_field() 함수를 반복적으로 호출함으로써 MYSQL_FIELD 구조를 얻을 수 있다.

필드 값들은 이 구조의 부분이 아니다; 그것들은 MYSQL_ROW 구조에 포함되어 있다

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));

MYSQL_FIELD 구조는 여기 열거한 요소들을 포함하고 있다:

char * name

null-terminated 문자열로, 필드의 MariaDB 또는 MySQL에서 사용하는 Data type 정리 이름. 필드에 AS 절로 알리아스(alias)가 주어졌다면,name 값은 그 알리아스(alias)이다.

char * org_name

null-terminated 문자열로, 필드 이름. 알리아스들이 무시된다.

char * table

계산되지 않은 필드를 포함하는 테이블 이름. 계산된 필드의 경우, table 값은 빈 문자열이다.

테이블에 AS 절로 알리아스가 주어졌다면, table 값은 그 알리아스이다.

char * org_table

null-terminated 문자열로, 테이블 이름. 알리아스들이 무시된다.

char * db

null-terminated 문자열로, 필드에서 온 데이터베이스의 이름. 필드가 계산된 필드라면,db 는 빈 문자열이다.

char * catalog

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

char * def

null-terminated 문자열로, 이 필드의 디폴트 값. mysql_list_fields()을 사용하면, 이것이 설정된다.

unsigned long length

테이블 정의에서 지정된 필드의 너비

unsigned long max_length

결과 셋의 필드 최대 너비(실제 결과 세트에서 로우를 위한 가장 긴 필드 값의 길이).

만약mysql_store_result() 또는 mysql_list_fields()을 사용한다면, 이것은 필드의 최대 길이를 포함하고 있다.

만약 mysql_use_result() 함수를 사용한다면, 이 변수의 값은0(zero)이다.

unsigned int name_length

unsigned int org_name_length

unsigned int table_length

unsigned int org_table_length

unsigned MariaDB 또는 MySQL에서 사용하는 Data type 정리 int db_length

unsigned int catalog_length

unsigned int def_length

unsigned int flags

필드에서 서로 다른 비트 플래그(bit-flag). flags 값은 0(zero) 또는 비트 세트에 따라 더 큰 값이 될 수 있다:


0 개 댓글

답장을 남겨주세요