2010-07-08 37 views
1

我必須在SQLite3中運行一個非常簡單的查詢。SQLite3存儲只包含數字的字符串

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

但無論我做什麼,號碼都存儲爲91912345789. +前綴被忽略。 該字段PhoneString。爲什麼它忽略+前綴? 有沒有辦法避免這種情況?

P.S.此代碼裏面的Android運行

編輯: 這是

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

SQLite臭名昭着地關於類型。這聽起來像是他們將字符串「鴨子式」輸入到一個數字中,然後再次輸入。 – 2010-07-08 13:39:09

+1

是「欄目」電話文字? – potatopeelings 2010-07-08 13:42:27

回答

8

< UPDATE >從the manual

「STRING」 的聲明的類型有NUMERIC的親和力,而不是文本

,請更改此列的類型TEXT,你應該完成。 </更新的最終 >

什麼是你Phone列(嘗試PRAGMA table_info (tblPhoneList))的類型?如果它是TEXT(或BLOB),則不應該有任何問題 - 只是在此嘗試。如果它是INTEGERREAL,則應將其轉換爲TEXT - 您不能指望INTEGERREAL列存儲+字符串。

所有的細節,請參閱Datatypes In SQLite Version 3

+0

我檢查了類型。它是字符串。我在這裏發佈了架構。 – Codevalley 2010-07-08 14:14:46

+0

看到我更新的答案 – 2010-07-08 14:22:06

1

在數據庫領域的手機不能是字符串表的模式,你最好檢查一下,TEXT或VARCHAR可能工作。祝你好運!

+0

確實是String。請檢查我的編輯。 – Codevalley 2010-07-08 14:13:49

2

它是文字! SQLite只支持Integer,Text,Real和BLOB。

+0

它是字符串,我已經發布了Schema。 – Codevalley 2010-07-08 14:14:04

+0

大聲笑:) SQLite將幾乎任何詞彙,例如字符串,放入最接近的匹配(文本,整數,實數,blob)。看到這個「親和力」部分:http://www.sqlite.org/datatype3.html – 2010-07-08 14:36:10

0

試試這個:

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

我試過了。它只是存儲'\ +91912345789'。用斜線。 – Codevalley 2010-07-08 14:15:15

+0

好的。你必須澄清一件事情,即你傳遞一個字符串作爲查詢?如果是,則嘗試以下操作:「插入或更換到tblPhoneList(Phone,PeopleId,StorageType)VALUES('」+「\ +」+「91912345789','1','1');」 – Praveen 2010-07-08 14:25:30

0

感謝所有的答覆。 我改變了類型String(是的,支持字符串類型)到Varchar(32),這個錯誤神奇地消失了。看起來像String類型在這裏得到了很好的支持。

+0

你可能會考慮接受你帶到那裏的答案(不是你自己的)。 – 2010-07-08 14:27:40