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 命令中分配给列的数据类型不会限制可以将哪些数据放入该列。每列都能够保存任意长度的字符串。(有一个例外: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 回答