Jaki jest typ wartości BOOL w SQLite? Chcę przechowywać w mojej tabeli wartości PRAWDA / FAŁSZ.
Mógłbym utworzyć kolumnę INTEGER i zapisać w niej wartości 0 lub 1, ale nie będzie to najlepszy sposób na implementację typu BOOL.
Czy jest jakiś sposób?
Dzięki.
Odpowiedzi:
Nie ma natywnego typu danych logicznych dla SQLite. Zgodnie z dokumentem Datatypes :
źródło
W SQLite najlepsze, co możesz zrobić, to użyć liczb całkowitych 0 i 1 do przedstawienia wartości false i true. Możesz zadeklarować typ kolumny w następujący sposób:
Pomiń,
NOT NULL
jeśli chcesz zezwolićNULL
oprócz 0 i 1.Użycie
BOOLEAN
tutaj nazwy typu służy do czytelności, dla SQLite jest to po prostu typ z powinowactwem NUMERYCZNYM .Zauważ, że ograniczenia CHECK są obsługiwane od SQLite 3.3.0 (2006).
Oto kilka przykładów WSTAWEK, które będą działać: (zwróć uwagę na to, jak ciągi i liczby zmiennoprzecinkowe są analizowane jako liczby całkowite)
i niektóre, które zawiodą:
źródło
SQLite Boolean Datatype:
SQLite nie ma oddzielnej logicznej klasy pamięci. Zamiast tego wartości logiczne są przechowywane jako liczby całkowite 0 (fałsz) i 1 (prawda).
Możesz przekonwertować wartość logiczną na int w następujący sposób:
Możesz przekonwertować int z powrotem na boolean w następujący sposób:
Jeśli chcesz poznać sqlite, oto samouczek .
Podałem tutaj jedną odpowiedź . To dla nich działa.
źródło
Boolean flag2 = (intValue != 0);
użycie typu danych Integer z wartościami 0 i 1 jest najszybsze.
źródło
W nawiązaniu do odpowiedzi Ericwy. Ograniczenia CHECK mogą włączyć pseudo-boolowską kolumnę poprzez wymuszenie typu danych TEKST i dopuszczenie tylko wartości PRAWDA lub FAŁSZ specyficznych dla sprawy, np.
źródło
Ale jeśli chcesz przechowywać kilka z nich, możesz je przesunąć bitowo i zapisać je jako jedną int, trochę jak uprawnienia / tryby plików unixowych.
Na przykład w trybie 755 każda cyfra odnosi się do innej klasy użytkowników: właściciela, grupy, publicznej. W obrębie każdej cyfry 4 jest odczytywane, 2 jest zapisywane, 1 jest wykonywane, więc 7 to wszystkie jak binarne 111. 5 jest czytane i wykonywane tak 101. Stwórz swój własny schemat kodowania.
Właśnie piszę coś do przechowywania danych harmonogramu TV z Schedules Direct i mam pola binarne lub tak / nie: stereo, hdtv, nowy, ei, blisko podpisu, dolby, SAP w języku hiszpańskim, premiera sezonu. Więc 7 bitów lub liczba całkowita z maksymalnie 127. Naprawdę jeden znak.
Przykład AC z tego, nad czym teraz pracuję. has () to funkcja, która zwraca 1, jeśli 2. ciąg znajduje się w pierwszym. inp jest łańcuchem wejściowym tej funkcji. misc jest znakiem bez znaku zainicjowanym na 0.
Przechowuję więc 7 wartości logicznych w jednej liczbie całkowitej z miejscem na więcej.
źródło
Można uprościć powyższe równania, stosując następujące czynności:
Jeśli int reprezentacja (sqlInt) wartości logicznej wynosi 0 (fałsz), wartość logiczna (flaga) będzie fałszywa, w przeciwnym razie będzie to prawda.
Zwięzły kod jest zawsze ładniejszy w pracy :)
źródło
Innym sposobem na to jest kolumna TEKST. A następnie przekonwertuj wartość logiczną między logiczną i ciąg przed / po zapisaniu / odczytaniu wartości z bazy danych.
Dawny. Ty masz
"boolValue = true;
„Do ciągu:
I wracając do boolean:
źródło