«INTEGER. Значением является целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.» Я думаю, использование 1 байта для хранения BOOL не так уж плохо.
Джос
2
Прямо из уст Лошади: «SQLite не имеет отдельного класса логического хранения. Вместо этого логические значения хранятся в виде целых чисел 0 (ложь) и 1 (истина)».
Тобиас
3
Что лучше с точки зрения производительности! истина / ложь как строки или 0/1 целое число?
Мухаммед Бабар
9
@MuhammadBabar 0/1 определенно. Строки медленнее и занимают больше места.
Давор
1
@joce На самом деле, целые числа 0 и 1 (а также NULL) кодируются непосредственно в объявлении типа данных строки. Так что это ноль байтов на логическое значение, если вы считаете только фактическое хранилище данных, и это здорово. Однако если вы учитываете бухгалтерию на столбец на строку, требуемую форматом файла, то для всех типов данных требуется дополнительный байт, что не так уж и здорово. :) (ссылка: sqlite.org/fileformat.html#record_format )
относительно
93
В SQLite лучшее, что вы можете сделать, это использовать целые числа 0 и 1 для представления значений false и true. Вы можете объявить тип столбца следующим образом:
Тип логики
SQLite : SQLite не имеет отдельного класса логического хранения. Вместо этого логические значения хранятся как целые числа 0 (ложь) и 1 (истина).
Вы можете преобразовать логическое значение в int следующим образом:
int flag =(boolValue)?1:0;
Вы можете преобразовать int обратно в логическое значение следующим образом:
//Select COLUMN_NAME valuesfrom db.// This will be integer value, you can convert this int value back to Boolean as follows
Boolean flag2 =(intValue ==1)? true : false;
Если вы хотите изучить sqlite, вот учебник .
Я дал один ответ здесь . Это работает для них.
В дополнение к ответу Эриквы. Ограничения CHECK могут включать псевдо-логический столбец, применяя тип данных TEXT и разрешая только значения TRUE или FALSE для конкретных случаев, например
Но, если вы хотите сохранить кучу из них, вы можете сдвинуть их побитно и сохранить их как один int, немного похоже на разрешения / режимы для файлов Unix.
Например, для режима 755 каждая цифра относится к разному классу пользователей: владелец, группа, общедоступный. Внутри каждой цифры 4 читается, 2 - запись, 1 - выполняется, поэтому 7 - все они, как двоичный файл 111. 5 читается и выполняется, так 101. Создайте свою собственную схему кодирования.
Я просто пишу что-то для хранения данных телепрограмм из Schedules Direct, и у меня есть двоичные поля или поля да / нет: стерео, hdtv, new, ei, с субтитрами, dolby, sap по-испански, премьера сезона. Так что 7 бит или целое число максимум 127. Один символ на самом деле.
Пример с того, над чем я сейчас работаю. has () - это функция, которая возвращает 1, если вторая строка находится в первой. inp является входной строкой для этой функции. misc - это неподписанный символ, инициализированный 0.
Еще один способ сделать это - столбец TEXT. А затем преобразуйте логическое значение между Boolean и String до / после сохранения / чтения значения из базы данных.
Ex. У вас есть "boolValue = true;"
Нанизывать:
//convertto the string "TRUE"
string StringValue = boolValue.ToString;
И вернемся к логическому:
//convert the string back to boolean
bool Boolvalue =Convert.ToBoolean(StringValue);
@Craig McMahon предлагает вместо этого использовать целое число: простые числа представляют истину, а не простые числа представляют ложь
Берик
19
Я считаю это очень оскорбительным, @Berik. Очевидное решение состоит в том, чтобы отобразить слово «ИСТИНА» или «ЛОЖЬ» на изображении, а затем сохранить его в строке базы данных как BLOB-код в формате JPEG. Затем можно прочитать значение обратно, используя простой алгоритм извлечения признаков.
Ответы:
Для SQLite нет собственного логического типа данных. Согласно документу Datatypes :
источник
В SQLite лучшее, что вы можете сделать, это использовать целые числа 0 и 1 для представления значений false и true. Вы можете объявить тип столбца следующим образом:
Опустите,
NOT NULL
если вы хотите разрешитьNULL
в дополнение к 0 и 1.Здесь используется имя типа
BOOLEAN
для удобства чтения, для SQLite это просто тип с NUMERIC-сходством .Обратите внимание, что ограничения CHECK поддерживаются начиная с SQLite 3.3.0 (2006).
Вот несколько примеров INSERT, которые будут работать: (обратите внимание, как строки и числа с плавающей точкой анализируются как целые числа)
и некоторые, которые потерпят неудачу:
источник
Тип логики
SQLite : SQLite не имеет отдельного класса логического хранения. Вместо этого логические значения хранятся как целые числа 0 (ложь) и 1 (истина).
Вы можете преобразовать логическое значение в int следующим образом:
Вы можете преобразовать int обратно в логическое значение следующим образом:
Если вы хотите изучить sqlite, вот учебник .
Я дал один ответ здесь . Это работает для них.
источник
Boolean flag2 = (intValue != 0);
использование типа данных Integer со значениями 0 и 1 является самым быстрым.
источник
В дополнение к ответу Эриквы. Ограничения CHECK могут включать псевдо-логический столбец, применяя тип данных TEXT и разрешая только значения TRUE или FALSE для конкретных случаев, например
источник
Но, если вы хотите сохранить кучу из них, вы можете сдвинуть их побитно и сохранить их как один int, немного похоже на разрешения / режимы для файлов Unix.
Например, для режима 755 каждая цифра относится к разному классу пользователей: владелец, группа, общедоступный. Внутри каждой цифры 4 читается, 2 - запись, 1 - выполняется, поэтому 7 - все они, как двоичный файл 111. 5 читается и выполняется, так 101. Создайте свою собственную схему кодирования.
Я просто пишу что-то для хранения данных телепрограмм из Schedules Direct, и у меня есть двоичные поля или поля да / нет: стерео, hdtv, new, ei, с субтитрами, dolby, sap по-испански, премьера сезона. Так что 7 бит или целое число максимум 127. Один символ на самом деле.
Пример с того, над чем я сейчас работаю. has () - это функция, которая возвращает 1, если вторая строка находится в первой. inp является входной строкой для этой функции. misc - это неподписанный символ, инициализированный 0.
Так что я храню 7 логических значений в одном целом числе, чтобы было больше места.
источник
Вы можете упростить приведенные выше уравнения, используя следующее:
Если представление int (sqlInt) логического значения равно 0 (false), логическое значение (flag) будет false, в противном случае оно будет истинным.
Сжатый код всегда приятнее работать :)
источник
Еще один способ сделать это - столбец TEXT. А затем преобразуйте логическое значение между Boolean и String до / после сохранения / чтения значения из базы данных.
Ex. У вас есть
"boolValue = true;
"Нанизывать:
И вернемся к логическому:
источник