具有布尔列的表,布尔值应该只接受值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布尔列,接受字符串和整数值。
答案 0 :(得分:4)
这是一个经常被问到的问题 - 它实际上是SQLite's FAQ:
(3)SQLite允许我将一个字符串插入一个整数类型的数据库列中!
这是一个功能,而不是一个bug。 SQLite使用dynamic typing。它不强制实施数据类型约束。任何数据都可以插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的datatype不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:类型INTEGER PRIMARY KEY的列可能只包含64位有符号整数。如果您尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,则会导致错误。)
但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为type affinity。
答案 1 :(得分:0)
SQLite使用动态类型,这意味着任何值都可以存储在任何列中。关于列的类型,SQLite documentation表示:
这里的重要思想是建议使用该类型,而不是必需的。任何列仍然可以存储任何类型的数据。