2

ブール列を持つテーブル、ブール値は値 0 または 1 のみを受け入れる必要がありますが、文字列値だけでなく int 値も受け入れています。

これはテーブルスキーマです -

CREATE TABLE maintable_slave ( din INTEGER, strip_no integer, strip_status boolean);

そして、これが私が列を更新しているクエリです-

update maintable_slave set strip_status = 5 where din = 1;

update maintable_slave set strip_status = 'add' where din = 1;

ここで、strip_status ブール列は文字列と整数値を受け入れます。

4

2 に答える 2

4

これはよくある質問です。文字通り、SQLite の FAQにあります。

(3) SQLite では、整数型のデータベース列に文字列を挿入できます。

これは機能であり、バグではありません。SQLite は動的型付けを使用します。データ型の制約は適用されません。任意のデータを任意の列に挿入できます。任意の長さの文字列を整数列に、浮動小数点数をブール列に、または日付を文字列に入れることができます。CREATE TABLE コマンドで列に割り当てるデータ型は、その列に入れることができるデータを制限しません。すべての列は、任意の長さの文字列を保持できます。(例外が 1 つあります。INTEGER PRIMARY KEY 型の列は 64 ビットの符号付き整数のみを保持できます。整数以外のものをINTEGER PRIMARY KEY列に入れようとすると、エラーが発生します。)

しかし、SQLite は、宣言された列の型を、その形式の値を好むというヒントとして使用します。たとえば、列が INTEGER 型で、その列に文字列を挿入しようとすると、SQLite は文字列を整数に変換しようとします。可能であれば、代わりに整数を挿入します。そうでない場合は、文字列を挿入します。この機能は、タイプ アフィニティと呼ばれます。

于 2012-05-27T06:12:09.667 に答える
0

SQLite は動的型を使用します。つまり、任意の値を任意の列に格納できます。列のタイプに関して、SQLite のドキュメントには次のように記載されています。

ここで重要な点は、タイプは必須ではなく推奨されるということです。任意の列には、任意のタイプのデータを格納できます。

于 2012-05-27T06:15:52.627 に答える