2017-04-08 17 views
0

アプリケーションのバックエンドデータベースとしてsqliteを使用し、float値を'real'データ型列に格納していますが、文字列値も格納します。 フロントエンドでデータをチェックできますが、レコードを挿入する際にsqliteがデータをチェックしない理由を知りたいのですが。数値データ型または実数データ型のSqliteストア文字列値

両方の値を格納するAu列をチェックしてください。 enter image description here

答えて

1

SQLiteは動的な型指定を使用します。つまり、値のデータ型は、そのコンテナではなく値自体に関連付けられます。データ型の制約は適用されません。任意のタイプのデータを任意の列に格納できます。このhereとSQLite hereのデータ型の詳細については、こちらをご覧ください。

(我々が知る限りのSQLite以外のすべてのSQLデータベースエンジン、)sqlite.org

ほとんどのSQLデータベースエンジンからの抜粋は、静的な、剛性のタイピングを使用しています。静的な型指定では、値のデータ型はそのコンテナ(値が格納されている特定の列)によって決まります。

SQLiteはより一般的な動的型システムを使用します。 SQLiteでは、値のデータ型はコンテナではなく、値自体に関連付けられます。 SQLiteの動的型システムは、静的型付きデータベースで動作するSQL文がSQLiteで同じように動作するという意味で、他のデータベースエンジンのより一般的な静的型システムと下位互換性があります。しかし、SQLiteの動的な型指定は、従来の厳密に型指定されたデータベースでは不可能なことを行うことができます。あなたのケースでは

SQLiteはあなたがダブル/浮動値に、すなわち asasassasを渡された値を変換しようとしたが、それはそれを行うことができなかったので、 stringとして値を挿入しています。 SQLiteのこの機能は、 type affinityと呼ばれています。

関連する問題