SQLite3 хранит строку, которая содержит только цифры - PullRequest
1 голос
/ 08 июля 2010

Мне нужно выполнить очень простой запрос, подобный этому, в SQLite3.

INSERT OR REPLACE INTO tblPhoneList(Phone, PeopleId, StorageType) VALUES('+91912345789', '1','1');

Но что бы я ни делал, номер сохраняется как 91912345789. Префикс + игнорируется. Поле Phone является String. Почему игнорируется префикс +? Есть ли способ избежать этого?

P.S. Этот код запускается внутри Android

EDIT: Это схема таблицы

CREATE TABLE tblPhoneList(Phone STRING PRIMARY KEY ON CONFLICT REPLACE, StorageT
ype INTEGER, PeopleId INTEGER, FOREIGN KEY(PeopleId) references tblPeople(id));

Ответы [ 5 ]

9 голосов
/ 08 июля 2010

<<strong> ОБНОВЛЕНИЕ > от руководство :

заявленный тип "STRING" имеет сходство NUMERIC, а не TEXT

, поэтому, пожалуйста, измените тип этого столбца на TEXT, и все готово. </ <strong>ОБНОВЛЕНИЕ КОНЕЦ >

каков тип вашего столбца Phone (попробуйте PRAGMA table_info (tblPhoneList)) ?. если это TEXT (или BLOB), у вас не должно быть проблем - просто попробуйте это здесь. если это INTEGER или REAL, вы должны преобразовать его в TEXT - вы не можете ожидать, что в столбце INTEGER или REAL будет храниться строка +.

Подробнее см. Типы данных в SQLite версии 3 .

2 голосов
/ 08 июля 2010

Это текст!SQLite поддерживает только Integer, Text, Real и BLOB.

1 голос
/ 08 июля 2010

поле Телефон в вашей БД не может быть строкой, лучше его проверить, может работать TEXT или VARCHARУдачи!

0 голосов
/ 08 июля 2010

Спасибо за все ответы.Я изменил тип String (да, поддерживается строковый тип IS) на Varchar(32), и эта ошибка волшебным образом исчезает.Похоже, тип String здесь плохо поддерживается.

0 голосов
/ 08 июля 2010

попробуйте это:

INSERT OR REPLACE INTO tblPhoneList(Phone, PeopleId, StorageType) VALUES('\+91912345789', '1','1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...