SQLite에서 BOOL 값의 유형은 무엇입니까? 내 테이블 TRUE / FALSE 값에 저장하고 싶습니다.
INTEGER의 열을 만들어 0 또는 1의 값으로 저장할 수는 있지만 BOOL 유형을 구현하는 가장 좋은 방법은 아닙니다.
방법이 있습니까?
감사.
SQLite에서 BOOL 값의 유형은 무엇입니까? 내 테이블 TRUE / FALSE 값에 저장하고 싶습니다.
INTEGER의 열을 만들어 0 또는 1의 값으로 저장할 수는 있지만 BOOL 유형을 구현하는 가장 좋은 방법은 아닙니다.
방법이 있습니까?
감사.
답변:
SQLite에 대한 기본 부울 데이터 유형이 없습니다. 데이터 유형 문서 당 :
SQLite에는 별도의 부울 스토리지 클래스가 없습니다. 대신 부울 값은 정수 0 (거짓) 및 1 (참)로 저장됩니다.
SQLite에서는 정수 0과 1을 사용하여 false와 true를 나타내는 것이 가장 좋습니다. 다음과 같이 열 유형을 선언 할 수 있습니다.
CREATE TABLE foo(mycolumn BOOLEAN NOT NULL CHECK (mycolumn IN (0,1)));
0과 1 외에 NOT NULL
허용하려는 경우 생략하십시오 NULL
.
BOOLEAN
여기 에서 유형 이름의 사용은 가독성을 위해 사용되며 SQLite 는 NUMERIC 선호도가 있는 유형 일뿐 입니다.
참고 CHECK 제약 때문에 지원 된 SQLite는 3.3.0 (2006 년).
다음은 작동하는 INSERT 예입니다. (문자열과 부동 소수점 숫자가 정수로 구문 분석되는 방법에 유의하십시오)
sqlite> INSERT INTO foo VALUES(0);
sqlite> INSERT INTO foo VALUES(1);
sqlite> INSERT INTO foo VALUES(0.0);
sqlite> INSERT INTO foo VALUES(1.0);
sqlite> INSERT INTO foo VALUES("0.0");
sqlite> INSERT INTO foo VALUES("1.0");
sqlite> select mycolumn, typeof(mycolumn) from foo;
0|integer
1|integer
0|integer
1|integer
0|integer
1|integer
그리고 일부는 실패 할 것입니다 :
sqlite> INSERT INTO foo VALUES("-1");
Error: constraint failed
sqlite> INSERT INTO foo VALUES(0.24);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(100);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(NULL);
Error: foo.mycolumn may not be NULL
sqlite> INSERT INTO foo VALUES("true");
Error: constraint failed
sqlite> INSERT INTO foo VALUES("false");
Error: constraint failed
SQLite 부울 데이터 유형 :
SQLite에는 별도의 부울 저장소 클래스가 없습니다. 대신 부울 값은 정수 0 (거짓) 및 1 (참)로 저장됩니다.
이 방법으로 부울을 int로 변환 할 수 있습니다.
int flag = (boolValue)? 1 : 0;
다음과 같이 int를 다시 부울로 변환 할 수 있습니다.
// Select COLUMN_NAME values from db.
// This will be integer value, you can convert this int value back to Boolean as follows
Boolean flag2 = (intValue == 1)? true : false;
sqlite를 탐색하려면 자습서가 있습니다.
나는 여기에 하나의 대답을 주었다 . 그들을 위해 일하고 있습니다.
Boolean flag2 = (intValue != 0);
값이 0과 1 인 정수 데이터 유형을 사용하는 것이 가장 빠릅니다.
ericwa의 답변에 더. CHECK 제약 조건은 TEXT 데이터 유형을 적용하고 TRUE 또는 FALSE 경우에만 특정 값을 허용하여 의사 부울 열을 활성화 할 수 있습니다.
CREATE TABLE IF NOT EXISTS "boolean_test"
(
"id" INTEGER PRIMARY KEY AUTOINCREMENT
, "boolean" TEXT NOT NULL
CHECK( typeof("boolean") = "text" AND
"boolean" IN ("TRUE","FALSE")
)
);
INSERT INTO "boolean_test" ("boolean") VALUES ("TRUE");
INSERT INTO "boolean_test" ("boolean") VALUES ("FALSE");
INSERT INTO "boolean_test" ("boolean") VALUES ("TEST");
Error: CHECK constraint failed: boolean_test
INSERT INTO "boolean_test" ("boolean") VALUES ("true");
Error: CHECK constraint failed: boolean_test
INSERT INTO "boolean_test" ("boolean") VALUES ("false");
Error: CHECK constraint failed: boolean_test
INSERT INTO "boolean_test" ("boolean") VALUES (1);
Error: CHECK constraint failed: boolean_test
select * from boolean_test;
id boolean
1 TRUE
2 FALSE
그러나 많은 파일을 저장하려면 유닉스 파일 사용 권한 / 모드와 같이 비트를 이동하여 하나의 int로 저장할 수 있습니다.
예를 들어 모드 755의 경우 각 숫자는 소유자, 그룹, 공개와 같은 다른 사용자 클래스를 나타냅니다. 각 숫자 내에서 4를 읽고, 2를 쓰고, 1을 실행하므로 7은 이진 111과 같이 7입니다. 5를 읽고 실행하여 101을 실행합니다. 고유 한 인코딩 체계를 구성하십시오.
나는 Schedules Direct에서 TV 일정 데이터를 저장하기 위해 무언가를 쓰고 있는데 스테레오, hdtv, 새로운, ei, 클로즈 캡션, dolby, 스페인어 수액, 시즌 프리미어 등 바이너리 또는 예 / 아니오 필드가 있습니다. 따라서 7 비트 또는 최대 127의 정수입니다. 실제로 한 문자입니다.
내가 지금하고있는 것의 AC 예. has ()는 두 번째 문자열이 첫 번째 문자열에 있으면 1을 반환하는 함수입니다. inp는이 함수의 입력 문자열입니다. misc는 0으로 초기화 된 부호없는 문자입니다.
if (has(inp,"sap='Spanish'") > 0)
misc += 1;
if (has(inp,"stereo='true'") > 0)
misc +=2;
if (has(inp,"ei='true'") > 0)
misc +=4;
if (has(inp,"closeCaptioned='true'") > 0)
misc += 8;
if (has(inp,"dolby=") > 0)
misc += 16;
if (has(inp,"new='true'") > 0)
misc += 32;
if (has(inp,"premier_finale='") > 0)
misc += 64;
if (has(inp,"hdtv='true'") > 0)
misc += 128;
그래서 더 많은 공간이있는 하나의 정수에 7 개의 부울을 저장하고 있습니다.
또 다른 방법은 TEXT 열입니다. 그런 다음 데이터베이스에서 값을 저장 / 읽기 전후에 부울과 문자열 사이에서 부울 값을 변환하십시오.
전의. 당신은 "boolValue = true;
"
문자열로 :
//convert to the string "TRUE"
string StringValue = boolValue.ToString;
그리고 부울로 돌아 가기 :
//convert the string back to boolean
bool Boolvalue = Convert.ToBoolean(StringValue);