Разница между типом данных "Текст" и "Строка" в SQLite - программирование

Разница между типом данных "Текст" и "Строка" в SQLite

У меня есть база данных SQLite с моим Android-приложением. Я заметил, что я случайно определил таблицу, используя тип данных "String" вместо типа данных "Текст". Вот код со строкой:

private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName string not null, UpdateDate string not null);";

Это работает. Он никогда не выдавал ошибку, и я могу хранить и извлекать данные. Однако я не могу найти ссылку на тип данных String в SQLite в документации или в Интернете. Как правило, все данные типа строки определяются с помощью "текста" следующим образом:

private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName text not null, UpdateDate text not null);";

Итак, мой вопрос в том, в чем разница между полем, определенным с типом данных типа "string" или "text"? Есть ли разница? Если да, каковы последствия, если таковые имеются, использования одного или другого?

4b9b3361

Ответ 1

Тонкая вещь, которую следует отметить здесь, заключается в том, что SQLite не применяет тип данных, которые вы помещаете в столбцы. Это означает, что вы можете поместить текст в числовое поле и т.д.

Чтобы понять разницу между двумя вашими операторами SQL, посмотрите раздел 2.1 Определение близости столбца, в котором перечислены типы столбцов, которые вы предоставляете классы хранения, используемые SQLite.

В этом случае тип string сопоставляется с классом хранения NUMERIC через правило 5. Объявление поля как text в коде будет указывать СУБД на использование класса хранения text. Опять же, поскольку SQLite не применяет типы столбцов, ваш код, вероятно, будет работать нормально при хранении строк как столбца NUMERIC, как вы заметили.

В качестве альтернативного примера вы можете определить столбец с типом INTERESTING STUFF и который будет отображаться в класс хранения INTEGER по правилу 1.

В целом, вероятно, неплохо просто использовать text для определения вашей таблицы.

Ответ 2

Это старый вопрос, но я хочу выделить конкретную разницу между типами столбцов STRING и TEXT. Если строка выглядит как числовое значение, STRING преобразует ее в числовое значение, а TEXT не будет выполнять никакого преобразования.

например.

create table t1(myint INTEGER, mystring STRING, mytext TEXT);
insert into t1 values ('0110', '0220', '0330');
insert into t1 values ('-0110', '-0220', '-0330');
insert into t1 values ('+0110', '+0220', '+0330');
insert into t1 values ('x0110', 'x0220', 'x0330');
insert into t1 values ('011.0', '022.0', '033.0');
select * from t1

выводит строки со значениями:

 myint mystring mytext
   110      220   0330
  -110     -220  -0330
   110      220  +0330
 x0110    x0220  x0330
    11       22  033.0

Это означает, что ведущие нули, нулевые конечные десятичные точки и символ плюс в числовых значениях будут удалены. Это вызовет проблемы, если вы собираетесь выполнять сопоставление строк, используя значения, считанные из таблицы.