2012-08-13 4 views
16

私はAndroidアプリケーションでSQLiteデータベースを持っています。私は誤って "テキスト"データ型の代わりに "文字列"データ型を使用してテーブルを定義していることに気付きました。文字列のコードは次のとおりです。SQLiteの "Text"データ型と "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);"; 

これは機能します。それはエラーを投げたことは一度もなく、私はデータを格納して取り出すことができます。しかし、私はSQLiteのドキュメントやインターネット上の "String"データ型への参照を見つけることができません。一般的に、すべての文字列型のデータがそうのような「テキスト」と定義されます。

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

だから私の質問は、「テキスト」データ型に対して「文字列」データ型で定義されたフィールドの違いは何ですか?違いはありますか?もしそうなら、もしあれば、どちらかを使うことの結果は何か?

答えて

26

ここで注意すべき微妙なことは、SQLiteはカラムに入れる値のデータ型を強制しないということです。つまり、数値フィールドにテキストを配置することができます。

2つのSQL文の違いを理解するには、2.1 Determination Of Column Affinityセクションを参照してください。これは、SQLiteが使用するストレージクラスに提供するカラムタイプをマップします。この場合

は、タイプstringTEXTストレージクラスを使用するDBMSを伝えることになるコードでtextとしてフィールドを宣言ルール5を介してストレージクラスNUMERICにマッピングされます。ここでも、SQLiteは列の型を強制しないので、文字列をNUMERIC列として格納すると、おそらくコードは正常に実行されます。

代替例として、あなたがタイプINTERESTING STUFFで列を定義することができ、そしてそれはINTEGERストレージクラスにマップされ、ルール1.

全体を経由して、それはちょうどあなたのためのtextを使用することはおそらく良い考えですテーブル定義。

+2

ありがとうございます。間違いを見つけたら、私は変更を加えましたが、私は残念ながらこの間違いで生産中のコードを持っていました。それは大きな問題ではないように見えるので、私は自然に老化させるようにしています。これは本当に素晴らしい情報です。ありがとうございました! –

4

これは古い質問ですが、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 

これは「数字」値に先行ゼロ、小数点を後続のゼロ、プラス記号が剥離されることを意味します。これは、テーブルから読み出された値を使用して文字列一致を行う場合に問題を引き起こします。

関連する問題