Префикс SQLite '+' удаляется в случае целого числа (тип столбца STRING) - PullRequest
3 голосов
/ 22 ноября 2011

У меня странная проблема.Я определил столбец в базе данных SQLite как STRING, но когда я использую его с целыми числами с префиксом +, он автоматически преобразует их в правильное целое число:

sqlite> create table test (key STRING);
sqlite> insert into test values ('+1'); 
sqlite> insert into test values ("+2");
sqlite> select * from test;
1
2

Как вы можете видеть + знак удален.С другой стороны, если я цитирую строки дважды :

sqlite> delete from test;
sqlite> insert into test values ('"+3"');
sqlite> insert into test values ("'+4'");
"+3"
'+4'

... это работает, как ожидалось, но они заключаются в кавычки.Моя основная проблема заключается в том, что мне нужно «заключить в кавычки» все строки, потому что Я не могу гарантировать, что какая-то строка будет выглядеть как целое число в базе данных и, следовательно, будет изменена на .

Вот чтоЯ хотел бы знать:

  • Почему SQLite ведет себя так (и, возможно, другие реализации)?
  • Могу ли я что-нибудь с этим сделать?(Без двойных кавычек?)

Просто для справки, вставка строки '+test' работает как положено:

sqlite> delete from test;
sqlite> insert into test values ('+t');
sqlite> select * from test;
+t

(ответ без кавычек -whiii!)

1 Ответ

3 голосов
/ 22 ноября 2011

Это связано с динамическим типом данных SQLite .В частности, STRING не является допустимым типом, поэтому SQLite по умолчанию имеет значение NUMERIC affinity.Фактически, чтобы процитировать с этой страницы:

Обратите внимание, что объявленный тип "FLOATING POINT" даст соответствие INTEGER, а не REAL, из-за "INT" в конце "POINT",И объявленный тип «STRING» имеет сходство NUMERIC, а не TEXT.

Вы хотите объявить свой столбец как TEXT, а не STRING.Это исправит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...